annotate libervia/backend/plugins/plugin_adhoc_registration.py @ 4212:5f2d496c633f

core: get rid of `pickle`: Use of `pickle` to serialise data was a technical legacy that was causing trouble to store in database, to update (if a class was serialised, a change could break update), and to security (pickle can lead to code execution). This patch remove all use of Pickle in favour in JSON, notably: - for caching data, a Pydantic model is now used instead - for SQLAlchemy model, the LegacyPickle is replaced by JSON serialisation - in XEP-0373 a class `PublicKeyMetadata` was serialised. New method `from_dict` and `to_dict` method have been implemented to do serialisation. - new methods to (de)serialise data can now be specified with Identity data types. It is notably used to (de)serialise `path` of avatars. A migration script has been created to convert data (for upgrade or downgrade), with special care for XEP-0373 case. Depending of size of database, this migration script can be long to run. rel 443
author Goffi <goffi@goffi.org>
date Fri, 23 Feb 2024 13:31:04 +0100
parents c6d85c31a59f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4185
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
1 #!/usr/bin/env python3
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
2
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
3 # Libervia plugin to handle web frontend registration links with Ad-Hoc Commands
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
4 # Copyright (C) 2009-2023 Jérôme Poisson (goffi@goffi.org)
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
5
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
6 # This program is free software: you can redistribute it and/or modify
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
7 # it under the terms of the GNU Affero General Public License as published by
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
8 # the Free Software Foundation, either version 3 of the License, or
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
9 # (at your option) any later version.
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
10
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
11 # This program is distributed in the hope that it will be useful,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
14 # GNU Affero General Public License for more details.
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
15
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
16 # You should have received a copy of the GNU Affero General Public License
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
18
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
19
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
20 import time
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
21 from uuid import uuid4
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
22
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
23 from twisted.internet import defer
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
24 from twisted.words.xish import domish
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
25 from wokkel import data_form
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
26
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
27 from libervia.backend.core import exceptions
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
28 from libervia.backend.core.constants import Const as C
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
29 from libervia.backend.core.core_types import SatXMPPEntity
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
30 from libervia.backend.core.i18n import D_, _
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
31 from libervia.backend.core.log import getLogger
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
32 from libervia.backend.memory import persistent
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
33 from libervia.backend.tools.common import data_format, date_utils
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
34
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
35 log = getLogger(__name__)
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
36
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
37
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
38 PLUGIN_INFO = {
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
39 C.PI_NAME: "Ad-Hoc Commands - Registration",
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
40 C.PI_IMPORT_NAME: "AD_HOC_REGISTRATION",
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
41 C.PI_TYPE: "Misc",
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
42 C.PI_PROTOCOLS: [],
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
43 C.PI_DEPENDENCIES: ["XEP-0050"],
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
44 C.PI_MAIN: "AdHocRegistration",
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
45 C.PI_HANDLER: "no",
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
46 C.PI_DESCRIPTION: _("""Add registration link handling Ad-Hoc commands"""),
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
47 }
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
48
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
49
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
50 class AdHocRegistration:
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
51 def __init__(self, host):
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
52 log.info(f"plugin {PLUGIN_INFO[C.PI_NAME]!r} initialization")
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
53 self.host = host
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
54 self._c = host.plugins["XEP-0050"]
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
55 self.ad_hoc_registration_data = persistent.LazyPersistentBinaryDict(
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
56 "registration_links"
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
57 )
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
58 host.bridge.add_method(
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
59 "registration_link_get",
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
60 ".plugin",
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
61 in_sign="s",
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
62 out_sign="s",
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
63 method=self._get,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
64 async_=True,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
65 )
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
66
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
67 def _get(self, registration_link_id: str) -> defer.Deferred[str]:
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
68 d = defer.ensureDeferred(self.get(registration_link_id))
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
69 d.addCallback(data_format.serialise)
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
70 return d
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
71
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
72 async def get(self, registration_link_id: str) -> dict:
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
73 """Retrieve registration link from its ID
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
74
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
75 @param registration_link_id: registration link data
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
76 @return: registration link data
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
77 @raise exceptions.NotFound: not registration link found with this ID.
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
78 """
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
79 link_data = await self.ad_hoc_registration_data.get(registration_link_id)
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
80 if not link_data:
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
81 raise exceptions.NotFound
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
82 expiration_timestamp = link_data.get("expiration_timestamp")
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
83 if expiration_timestamp is not None and expiration_timestamp < time.time():
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
84 log.info(f"Deleting expiration link {registration_link_id}.")
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
85 await self.ad_hoc_registration_data.adel(registration_link_id)
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
86 raise exceptions.NotFound
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
87 return link_data
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
88
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
89 async def profile_connected(self, client):
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
90 if client.is_admin:
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
91 self._c.add_ad_hoc_command(
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
92 client,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
93 self.create_registration_link,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
94 D_("Create Registration Link"),
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
95 node="https://libervia.org/registration/create",
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
96 )
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
97 self._c.add_ad_hoc_command(
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
98 client,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
99 self.list_registration_links,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
100 D_("List Registration Links"),
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
101 node="https://libervia.org/registration/list",
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
102 )
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
103 self._c.add_ad_hoc_command(
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
104 client,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
105 self.delete_registration_link,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
106 D_("Delete Registration Link"),
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
107 node="https://libervia.org/registration/delete",
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
108 )
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
109
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
110 async def create_registration_link(
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
111 self,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
112 client: SatXMPPEntity,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
113 command_elt: domish.Element,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
114 session_data: dict,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
115 action: str,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
116 node: str,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
117 ) -> tuple[domish.Element | None, str, None, tuple[str, str] | None]:
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
118 """Ad-hoc command used to create a registration link.
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
119
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
120 This method presents a form to the user for creating a registration link,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
121 and processes the submitted form to generate and store the link with its
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
122 associated data.
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
123
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
124 @param client: The XMPP client instance.
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
125 @param command_elt: The command element.
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
126 @param session_data: Data associated with the current session.
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
127 @param action: The action being performed.
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
128 @param node: The node identifier.
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
129
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
130 @return: A tuple containing the payload if any,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
131 """
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
132 actions = session_data.setdefault("actions", [])
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
133 actions.append(action)
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
134
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
135 if len(actions) == 1:
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
136 # First request, presenting the form to the user
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
137 status = self._c.STATUS.EXECUTING
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
138 form = data_form.Form("form", title=D_("Create Registration Link"))
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
139
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
140 form.addField(
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
141 data_form.Field("text-single", "recipient", label=D_("Recipient Name"))
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
142 )
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
143 form.addField(
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
144 data_form.Field(
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
145 "text-single",
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
146 "expiration_time_pattern",
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
147 label=D_("Expiration Date"),
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
148 desc=D_(
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
149 "Set the expiry duration for this link. Use the Libervia Time "
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
150 "Pattern (e.g., '1 week'). The link will expire after this "
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
151 "period."
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
152 ),
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
153 value="1 week",
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
154 required=True,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
155 )
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
156 )
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
157 form.addField(
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
158 data_form.Field(
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
159 "text-single",
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
160 "registration_limit",
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
161 label=D_("Maximum registrations limit"),
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
162 desc=D_(
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
163 "How many accounts can be registered using this link. Set to 0 "
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
164 "for unlimited registrations."
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
165 ),
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
166 value="1",
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
167 required=True,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
168 )
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
169 )
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
170 form.addField(
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
171 data_form.Field(
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
172 "text-multi", "welcome_message", label=D_("Welcome Message")
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
173 )
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
174 )
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
175 form.addField(
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
176 data_form.Field(
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
177 "text-multi",
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
178 "extra_details",
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
179 label=D_("Additional Details"),
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
180 )
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
181 )
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
182
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
183 payload = form.toElement()
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
184 note = None
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
185
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
186 elif len(actions) == 2:
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
187 try:
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
188 x_elt = next(command_elt.elements(data_form.NS_X_DATA, "x"))
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
189 answer_form = data_form.Form.fromElement(x_elt)
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
190
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
191 recipient = answer_form.get("recipient", None)
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
192 expiration_time_pattern = answer_form["expiration_time_pattern"]
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
193 if expiration_time_pattern == "never":
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
194 expiration_timestamp = None
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
195 else:
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
196 expiration_timestamp = date_utils.date_parse_ext(
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
197 expiration_time_pattern, default_tz=date_utils.TZ_LOCAL
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
198 )
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
199 registration_limit = int(answer_form["registration_limit"])
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
200 welcome_message = answer_form.get("welcome_message", "")
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
201 extra_details = answer_form.get("extra_details", "")
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
202
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
203 link_id = str(uuid4())
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
204
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
205 link_data = {
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
206 "recipient": recipient,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
207 "registration_limit": registration_limit,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
208 "welcome_message": welcome_message,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
209 "extra_details": extra_details,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
210 "creator_jid": session_data["requestor"].full(),
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
211 "use_count": 0,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
212 "creation_timestamp": int(time.time()),
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
213 }
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
214 if expiration_timestamp is not None:
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
215 link_data["expiration_timestamp"] = expiration_timestamp
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
216
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
217 await self.ad_hoc_registration_data.aset(link_id, link_data)
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
218
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
219 status = self._c.STATUS.COMPLETED
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
220 payload = None
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
221 note = (
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
222 self._c.NOTE.INFO,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
223 D_("Registration link created successfully: {link_id}").format(
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
224 link_id=link_id
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
225 ),
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
226 )
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
227 except (KeyError, StopIteration, ValueError):
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
228 raise self._c.AdHocError(self._c.ERROR.BAD_PAYLOAD)
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
229 else:
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
230 raise self._c.AdHocError(self._c.ERROR.INTERNAL)
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
231
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
232 return (payload, status, None, note)
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
233
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
234 async def list_registration_links(
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
235 self,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
236 client: SatXMPPEntity,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
237 command_elt: domish.Element,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
238 session_data: dict,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
239 action: str,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
240 node: str,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
241 ) -> tuple[domish.Element | None, str, None, tuple[str, str] | None]:
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
242 """Ad-hoc command used to list all registration links.
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
243
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
244 This method retrieves all the registration links and presents them to the user.
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
245
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
246 @param client: The XMPP client instance.
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
247 @param command_elt: The command element.
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
248 @param session_data: Data associated with the current session.
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
249 @param action: The action being performed.
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
250 @param node: The node identifier.
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
251
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
252 @return: A tuple containing the payload if any,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
253 """
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
254 actions = session_data.setdefault("actions", [])
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
255 actions.append(action)
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
256
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
257 if len(actions) == 1:
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
258 all_links = await self.ad_hoc_registration_data.all()
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
259 status = self._c.STATUS.EXECUTING
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
260
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
261 form = data_form.Form("form", title=D_("Registered Links"))
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
262 for link_id, link_data in all_links.items():
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
263 form.addField(
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
264 data_form.Field(
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
265 "text-multi",
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
266 var=f"link_{link_id}",
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
267 label=D_("Link ID: {link_id}").format(link_id=link_id),
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
268 value=str(link_data),
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
269 )
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
270 )
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
271
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
272 payload = form.toElement()
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
273 note = None
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
274
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
275 status = self._c.STATUS.COMPLETED
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
276
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
277 else:
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
278 raise self._c.AdHocError(self._c.ERROR.INTERNAL)
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
279
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
280 return (payload, status, None, note)
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
281
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
282 async def delete_registration_link(
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
283 self,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
284 client: SatXMPPEntity,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
285 command_elt: domish.Element,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
286 session_data: dict,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
287 action: str,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
288 node: str,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
289 ) -> tuple[domish.Element | None, str, None, tuple[str, str] | None]:
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
290 """Ad-hoc command used to delete a registration link.
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
291
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
292 This method presents a form to the user for selecting a registration link to
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
293 delete, and processes the submitted form to delete the selected link.
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
294
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
295 @param client: The XMPP client instance.
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
296 @param command_elt: The command element.
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
297 @param session_data: Data associated with the current session.
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
298 @param action: The action being performed.
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
299 @param node: The node identifier.
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
300
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
301 @return: A tuple containing the payload if any,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
302 """
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
303 actions = session_data.setdefault("actions", [])
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
304 actions.append(action)
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
305
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
306 if len(actions) == 1:
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
307 all_links = await self.ad_hoc_registration_data.all()
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
308 status = self._c.STATUS.EXECUTING
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
309 form = data_form.Form("form", title=D_("Delete Registration Link"))
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
310
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
311 link_options = [data_form.Option(link_id, link_id) for link_id in all_links]
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
312 form.addField(
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
313 data_form.Field(
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
314 "list-single",
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
315 "link_to_delete",
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
316 label=D_("Select Link to Delete"),
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
317 options=link_options,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
318 required=True,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
319 )
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
320 )
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
321
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
322 payload = form.toElement()
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
323 note = None
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
324
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
325 elif len(actions) == 2:
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
326 try:
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
327 x_elt = next(command_elt.elements(data_form.NS_X_DATA, "x"))
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
328 answer_form = data_form.Form.fromElement(x_elt)
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
329 link_to_delete = answer_form["link_to_delete"]
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
330
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
331 await self.ad_hoc_registration_data.adel(link_to_delete)
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
332
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
333 status = self._c.STATUS.COMPLETED
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
334 payload = None
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
335 note = (
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
336 self._c.NOTE.INFO,
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
337 D_("Registration link {link_id} deleted successfully.").format(
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
338 link_id=link_to_delete
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
339 ),
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
340 )
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
341 except (KeyError, StopIteration, ValueError):
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
342 raise self._c.AdHocError(self._c.ERROR.BAD_PAYLOAD)
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
343 else:
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
344 raise self._c.AdHocError(self._c.ERROR.INTERNAL)
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
345
c6d85c31a59f plugin ad-hoc registration: Implement plugin to handle registration links:
Goffi <goffi@goffi.org>
parents:
diff changeset
346 return (payload, status, None, note)