Mercurial > libervia-backend
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 |
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) |