Mercurial > libervia-backend
annotate libervia/backend/plugins/plugin_xep_0077.py @ 4332:71c939e34ca6
XEP-0373 (OX): Adjust to gpgme updates: generate with explicit algorithm and subkeys
author | Syndace <me@syndace.dev> |
---|---|
date | Sat, 13 Jul 2024 18:28:28 +0200 |
parents | 7ded09452875 |
children |
rev | line source |
---|---|
3028 | 1 #!/usr/bin/env python3 |
3137 | 2 |
30
d6b613764dd7
new plugin for xep 0077 (In-Band registration): first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
3 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
4 # SAT plugin for managing xep-0077 |
3479 | 5 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org) |
30
d6b613764dd7
new plugin for xep 0077 (In-Band registration): first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
6 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
7 # This program is free software: you can redistribute it and/or modify |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
8 # it under the terms of the GNU Affero General Public License as published by |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
9 # the Free Software Foundation, either version 3 of the License, or |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
10 # (at your option) any later version. |
30
d6b613764dd7
new plugin for xep 0077 (In-Band registration): first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
11 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
12 # This program is distributed in the hope that it will be useful, |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
15 # GNU Affero General Public License for more details. |
30
d6b613764dd7
new plugin for xep 0077 (In-Band registration): first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
16 |
609
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
17 # You should have received a copy of the GNU Affero General Public License |
84a6e83157c2
fixed licences in docstrings (they are now in comments)
Goffi <goffi@goffi.org>
parents:
594
diff
changeset
|
18 # along with this program. If not, see <http://www.gnu.org/licenses/>. |
30
d6b613764dd7
new plugin for xep 0077 (In-Band registration): first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
19 |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
20 from typing import Awaitable, Callable, NamedTuple, cast |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
21 |
3354
aafb53248872
plugin XEP-0077: fixed "check_certificate" handling
Goffi <goffi@goffi.org>
parents:
3334
diff
changeset
|
22 from twisted.internet import defer, reactor, ssl |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
23 from twisted.internet.interfaces import IReactorCore |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
24 from twisted.python.failure import Failure |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
25 from twisted.words.protocols.jabber import ( |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
26 client, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
27 error as jabber_error, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
28 jid, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
29 xmlstream as xmlstream_mod, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
30 ) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
31 from twisted.words.xish import domish |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
32 from wokkel import data_form, disco, iwokkel |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
33 from zope.interface import implementer |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
34 |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
35 from libervia.backend.core import exceptions |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
36 from libervia.backend.core.constants import Const as C |
4071
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
37 from libervia.backend.core.i18n import _ |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
38 from libervia.backend.core.log import getLogger |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
39 from libervia.backend.core.xmpp import SatXMPPEntity |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
40 from libervia.backend.tools import xml_tools |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
41 from libervia.backend.tools.utils import as_deferred, ensure_deferred |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
42 |
993
301b342c697a
core: use of the new core.log module:
Goffi <goffi@goffi.org>
parents:
941
diff
changeset
|
43 log = getLogger(__name__) |
33
b9bb5d8e0cc7
In-band-registration: data form 2 xml conversion
Goffi <goffi@goffi.org>
parents:
30
diff
changeset
|
44 |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
45 NS_IQ_REGISTER = "jabber:iq:register" |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
46 IQ_REGISTER_REQUEST = f'{C.IQ_GET}/query[@xmlns="{NS_IQ_REGISTER}"]' |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
47 IQ_SUBMIT_REQUEST = f'{C.IQ_SET}/query[@xmlns="{NS_IQ_REGISTER}"]' |
30
d6b613764dd7
new plugin for xep 0077 (In-Band registration): first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
48 |
d6b613764dd7
new plugin for xep 0077 (In-Band registration): first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
49 PLUGIN_INFO = { |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
50 C.PI_NAME: "In-Band Registration", |
2145
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
51 C.PI_IMPORT_NAME: "XEP-0077", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
52 C.PI_TYPE: "XEP", |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
53 C.PI_MODES: C.PLUG_MODE_BOTH, |
2145
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
54 C.PI_PROTOCOLS: ["XEP-0077"], |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
55 C.PI_DEPENDENCIES: [], |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
1934
diff
changeset
|
56 C.PI_MAIN: "XEP_0077", |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
57 C.PI_DESCRIPTION: _("""Implementation of in-band registration."""), |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
58 C.PI_HANDLER: C.BOOL_TRUE, |
30
d6b613764dd7
new plugin for xep 0077 (In-Band registration): first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
59 } |
d6b613764dd7
new plugin for xep 0077 (In-Band registration): first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
60 |
2172
545a1261ac3b
core, plugin XEP-0077: in-band registration fix and move:
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
61 # FIXME: this implementation is incomplete |
545a1261ac3b
core, plugin XEP-0077: in-band registration fix and move:
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
62 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
63 |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
64 class RegistrationHandlers(NamedTuple): |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
65 form_handler: Callable |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
66 submit_handler: Callable |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
67 |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
68 |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
69 class RegisteringAuthenticator(xmlstream_mod.ConnectAuthenticator): |
2634
6c89cf856d28
plugin XEP-0077: fixed RegisteringAuthenticator to use TLS if possible
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
70 # FIXME: request IQ is not send to check available fields, |
6c89cf856d28
plugin XEP-0077: fixed RegisteringAuthenticator to use TLS if possible
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
71 # while XEP recommand to use it |
2172
545a1261ac3b
core, plugin XEP-0077: in-band registration fix and move:
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
72 # FIXME: doesn't handle data form or oob |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
73 namespace = "jabber:client" |
2172
545a1261ac3b
core, plugin XEP-0077: in-band registration fix and move:
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
74 |
2838
8018cf9aa55b
plugin XEP-0077: correctly report invalid certificate + errback on unexpected stream close
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
75 def __init__(self, jid_, password, email=None, check_certificate=True): |
3028 | 76 log.debug(_("Registration asked for {jid}").format(jid=jid_)) |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
77 xmlstream_mod.ConnectAuthenticator.__init__(self, jid_.host) |
2172
545a1261ac3b
core, plugin XEP-0077: in-band registration fix and move:
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
78 self.jid = jid_ |
545a1261ac3b
core, plugin XEP-0077: in-band registration fix and move:
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
79 self.password = password |
545a1261ac3b
core, plugin XEP-0077: in-band registration fix and move:
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
80 self.email = email |
2838
8018cf9aa55b
plugin XEP-0077: correctly report invalid certificate + errback on unexpected stream close
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
81 self.check_certificate = check_certificate |
2172
545a1261ac3b
core, plugin XEP-0077: in-band registration fix and move:
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
82 self.registered = defer.Deferred() |
2634
6c89cf856d28
plugin XEP-0077: fixed RegisteringAuthenticator to use TLS if possible
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
83 |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
84 def associateWithStream(self, xmlstream): |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
85 xmlstream_mod.ConnectAuthenticator.associateWithStream(self, xmlstream) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
86 xmlstream.addObserver(xmlstream_mod.STREAM_AUTHD_EVENT, self.register) |
2634
6c89cf856d28
plugin XEP-0077: fixed RegisteringAuthenticator to use TLS if possible
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
87 |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
88 xmlstream.initializers = [client.CheckVersionInitializer(xmlstream)] |
3354
aafb53248872
plugin XEP-0077: fixed "check_certificate" handling
Goffi <goffi@goffi.org>
parents:
3334
diff
changeset
|
89 if self.check_certificate: |
aafb53248872
plugin XEP-0077: fixed "check_certificate" handling
Goffi <goffi@goffi.org>
parents:
3334
diff
changeset
|
90 tls_required, configurationForTLS = True, None |
aafb53248872
plugin XEP-0077: fixed "check_certificate" handling
Goffi <goffi@goffi.org>
parents:
3334
diff
changeset
|
91 else: |
aafb53248872
plugin XEP-0077: fixed "check_certificate" handling
Goffi <goffi@goffi.org>
parents:
3334
diff
changeset
|
92 tls_required = False |
aafb53248872
plugin XEP-0077: fixed "check_certificate" handling
Goffi <goffi@goffi.org>
parents:
3334
diff
changeset
|
93 configurationForTLS = ssl.CertificateOptions(trustRoot=None) |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
94 tls_init = xmlstream_mod.TLSInitiatingInitializer( |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
95 xmlstream, required=tls_required, configurationForTLS=configurationForTLS |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
96 ) |
3354
aafb53248872
plugin XEP-0077: fixed "check_certificate" handling
Goffi <goffi@goffi.org>
parents:
3334
diff
changeset
|
97 |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
98 xmlstream.initializers.append(tls_init) |
2172
545a1261ac3b
core, plugin XEP-0077: in-band registration fix and move:
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
99 |
2634
6c89cf856d28
plugin XEP-0077: fixed RegisteringAuthenticator to use TLS if possible
Goffi <goffi@goffi.org>
parents:
2624
diff
changeset
|
100 def register(self, xmlstream): |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
101 log.debug( |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
102 _( |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
103 "Stream started with {server}, now registering".format( |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
104 server=self.jid.host |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
105 ) |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
106 ) |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
107 ) |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
108 iq = XEP_0077.build_register_iq( |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
109 self.xmlstream, self.jid, self.password, self.email |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
110 ) |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
111 d = iq.send(self.jid.host).addCallbacks( |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
112 self.registration_cb, self.registration_eb |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
113 ) |
2172
545a1261ac3b
core, plugin XEP-0077: in-band registration fix and move:
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
114 d.chainDeferred(self.registered) |
545a1261ac3b
core, plugin XEP-0077: in-band registration fix and move:
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
115 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
116 def registration_cb(self, answer): |
3028 | 117 log.debug(_("Registration answer: {}").format(answer.toXml())) |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
118 assert self.xmlstream is not None |
2172
545a1261ac3b
core, plugin XEP-0077: in-band registration fix and move:
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
119 self.xmlstream.sendFooter() |
545a1261ac3b
core, plugin XEP-0077: in-band registration fix and move:
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
120 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
121 def registration_eb(self, failure_): |
3028 | 122 log.info(_("Registration failure: {}").format(str(failure_.value))) |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
123 assert self.xmlstream is not None |
2172
545a1261ac3b
core, plugin XEP-0077: in-band registration fix and move:
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
124 self.xmlstream.sendFooter() |
2183 | 125 raise failure_ |
2172
545a1261ac3b
core, plugin XEP-0077: in-band registration fix and move:
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
126 |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
127 |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
128 class ServerRegister(xmlstream_mod.XmlStreamFactory): |
2838
8018cf9aa55b
plugin XEP-0077: correctly report invalid certificate + errback on unexpected stream close
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
129 |
8018cf9aa55b
plugin XEP-0077: correctly report invalid certificate + errback on unexpected stream close
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
130 def __init__(self, *args, **kwargs): |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
131 xmlstream_mod.XmlStreamFactory.__init__(self, *args, **kwargs) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
132 self.addBootstrap(xmlstream_mod.STREAM_END_EVENT, self._disconnected) |
2838
8018cf9aa55b
plugin XEP-0077: correctly report invalid certificate + errback on unexpected stream close
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
133 |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
134 def clientConnectionLost(self, connector, unused_reason): |
2838
8018cf9aa55b
plugin XEP-0077: correctly report invalid certificate + errback on unexpected stream close
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
135 connector.disconnect() |
8018cf9aa55b
plugin XEP-0077: correctly report invalid certificate + errback on unexpected stream close
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
136 |
8018cf9aa55b
plugin XEP-0077: correctly report invalid certificate + errback on unexpected stream close
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
137 def _disconnected(self, reason): |
8018cf9aa55b
plugin XEP-0077: correctly report invalid certificate + errback on unexpected stream close
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
138 if not self.authenticator.registered.called: |
3028 | 139 err = jabber_error.StreamError("Server unexpectedly closed the connection") |
2838
8018cf9aa55b
plugin XEP-0077: correctly report invalid certificate + errback on unexpected stream close
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
140 try: |
8018cf9aa55b
plugin XEP-0077: correctly report invalid certificate + errback on unexpected stream close
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
141 if reason.value.args[0][0][2] == "certificate verify failed": |
8018cf9aa55b
plugin XEP-0077: correctly report invalid certificate + errback on unexpected stream close
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
142 err = exceptions.InvalidCertificate() |
8018cf9aa55b
plugin XEP-0077: correctly report invalid certificate + errback on unexpected stream close
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
143 except (IndexError, TypeError): |
8018cf9aa55b
plugin XEP-0077: correctly report invalid certificate + errback on unexpected stream close
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
144 pass |
8018cf9aa55b
plugin XEP-0077: correctly report invalid certificate + errback on unexpected stream close
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
145 self.authenticator.registered.errback(err) |
8018cf9aa55b
plugin XEP-0077: correctly report invalid certificate + errback on unexpected stream close
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
146 |
8018cf9aa55b
plugin XEP-0077: correctly report invalid certificate + errback on unexpected stream close
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
147 |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
148 class XEP_0077: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
149 |
30
d6b613764dd7
new plugin for xep 0077 (In-Band registration): first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
150 def __init__(self, host): |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
151 log.info(f"plugin {PLUGIN_INFO[C.PI_NAME]!r} initialization") |
30
d6b613764dd7
new plugin for xep 0077 (In-Band registration): first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
152 self.host = host |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
153 host.register_namespace("iq-register", NS_IQ_REGISTER) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
154 host.bridge.add_method( |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
155 "in_band_register", |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
156 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
157 in_sign="ss", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
158 out_sign="", |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
159 method=self._in_band_register, |
3028 | 160 async_=True, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
161 ) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
162 host.bridge.add_method( |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
163 "in_band_account_new", |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
164 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
165 in_sign="ssssi", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
166 out_sign="", |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
167 method=self._register_new_account, |
3028 | 168 async_=True, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
169 ) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
170 host.bridge.add_method( |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
171 "in_band_unregister", |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
172 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
173 in_sign="ss", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
174 out_sign="", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
175 method=self._unregister, |
3028 | 176 async_=True, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
177 ) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
178 host.bridge.add_method( |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
179 "in_band_password_change", |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
180 ".plugin", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
181 in_sign="ss", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
182 out_sign="", |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
183 method=self._change_password, |
3028 | 184 async_=True, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
185 ) |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
186 self.handlers = set() |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
187 |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
188 def get_handler(self, client: SatXMPPEntity) -> xmlstream_mod.XMPPHandler: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
189 return XEP_0077_handler(self) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
190 |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
191 def register_handler( |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
192 self, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
193 form_handler: Callable[ |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
194 [SatXMPPEntity, domish.Element], |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
195 Awaitable[tuple[bool, data_form.Form] | None] |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
196 | defer.Deferred[tuple[bool, data_form.Form] | None] |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
197 | tuple[bool, data_form.Form] |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
198 | None, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
199 ], |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
200 submit_handler: Callable[ |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
201 [SatXMPPEntity, domish.Element, data_form.Form | None], |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
202 Awaitable[bool | None] | defer.Deferred[bool | None] | bool | None, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
203 ], |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
204 ) -> None: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
205 """ |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
206 Register a new handler. |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
207 |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
208 Mostly useful for component which handle In-Band Registration. |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
209 @param form_handler: method to call on registration request to get a data form. |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
210 May be async. |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
211 The handler must return a data_form.Form instance if it can handle the |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
212 request, otherwise other handlers will be tried until one returns a data form. |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
213 @param submit_handler: method to call on registration request to submit the |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
214 handler. |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
215 In case of "unregister" request, None will be used instead of a |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
216 data_form.Form. |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
217 """ |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
218 self.handlers.add(RegistrationHandlers(form_handler, submit_handler)) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
219 |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
220 def _on_register_request(self, iq_elt: domish.Element, client: SatXMPPEntity) -> None: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
221 defer.ensureDeferred(self._on_request(iq_elt, client, True)) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
222 |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
223 def _on_submit_request(self, iq_elt: domish.Element, client: SatXMPPEntity) -> None: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
224 defer.ensureDeferred(self._on_request(iq_elt, client, False)) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
225 |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
226 async def _on_request( |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
227 self, iq_elt: domish.Element, client: SatXMPPEntity, is_register: bool |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
228 ) -> None: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
229 """Handle a register or submit request. |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
230 |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
231 @param iq_elt: The IQ element of the request. |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
232 @param client: Client session. |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
233 @param is_register: Whether this is a register request (True) or a submit request |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
234 (False). |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
235 """ |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
236 iq_elt.handled = True |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
237 |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
238 # Submit request must have a form with submitted values. |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
239 if is_register: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
240 handler_type = "register" |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
241 submit_form = None |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
242 else: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
243 handler_type = "submit" |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
244 remove_elt = next(iq_elt.query.elements(NS_IQ_REGISTER, "remove"), None) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
245 if remove_elt is not None: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
246 # This is a unregister request. |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
247 submit_form = None |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
248 else: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
249 submit_form = data_form.findForm(iq_elt.query, NS_IQ_REGISTER) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
250 if submit_form is None: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
251 log.warning(f"Data form not found, invalid request: {iq_elt.toXml()}") |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
252 client.send( |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
253 jabber_error.StanzaError( |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
254 "bad-request", text="No data form found." |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
255 ).toResponse(iq_elt) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
256 ) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
257 return |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
258 |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
259 # We look and run relevant handler. |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
260 for handlers in self.handlers: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
261 if is_register: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
262 handler = handlers.form_handler |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
263 handler_call = as_deferred(handler, client, iq_elt) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
264 else: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
265 handler = handlers.submit_handler |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
266 handler_call = as_deferred(handler, client, iq_elt, submit_form) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
267 try: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
268 callback_ret = await handler_call |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
269 except jabber_error.StanzaError as e: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
270 iq_error_elt = e.toResponse(iq_elt) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
271 client.send(iq_error_elt) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
272 return |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
273 except exceptions.PasswordError as e: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
274 log.warning("Invalid login or password while registering to service.") |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
275 iq_error_elt = jabber_error.StanzaError( |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
276 "forbidden", text=str(e) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
277 ).toResponse(iq_elt) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
278 client.send(iq_error_elt) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
279 return |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
280 except Exception: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
281 log.exception( |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
282 f"Error while handling {handler_type} request with {handler}, " |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
283 "ignoring it." |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
284 ) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
285 continue |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
286 if callback_ret is not None: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
287 if is_register: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
288 try: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
289 registered, registration_form = callback_ret |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
290 assert isinstance(registered, bool) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
291 assert isinstance(registration_form, data_form.Form) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
292 except (TypeError, ValueError, AssertionError) as e: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
293 log.warning( |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
294 f"Invalid return value from {handler}, ignoring it: {e}" |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
295 ) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
296 continue |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
297 # We need to be sure to have the right namespace for the form. |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
298 registration_form.formNamespace = NS_IQ_REGISTER |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
299 iq_result_elt = xmlstream_mod.toResponse(iq_elt, "result") |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
300 query_elt = iq_result_elt.addElement((NS_IQ_REGISTER, "query")) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
301 |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
302 if registered: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
303 # The requestor is already registered, we indicate it. |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
304 query_elt.addElement("registered") |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
305 |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
306 query_elt.addChild(registration_form.toElement()) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
307 client.send(iq_result_elt) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
308 else: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
309 if callback_ret is True: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
310 if submit_form is None: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
311 log.info(f"User {iq_elt['from']} successfully unregistered.") |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
312 else: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
313 log.info(f"User {iq_elt['from']} successfully registered.") |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
314 else: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
315 log.error( |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
316 f"Unexpected return value from {handler}, was expecting " |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
317 '"True".' |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
318 ) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
319 client.send( |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
320 jabber_error.StanzaError( |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
321 "internal-server-error", text="Error in request handler." |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
322 ).toResponse(iq_elt) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
323 ) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
324 return |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
325 iq_result_elt = xmlstream_mod.toResponse(iq_elt, "result") |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
326 client.send(iq_result_elt) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
327 break |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
328 else: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
329 log.warning( |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
330 f"No handler found for in-band registration {handler_type} request: " |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
331 f"{iq_elt.toXml()}." |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
332 ) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
333 iq_error_elt = jabber_error.StanzaError("service-unavailable").toResponse( |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
334 iq_elt |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
335 ) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
336 client.send(iq_error_elt) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
337 return |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
338 |
2175
75002ac33801
plugin XEP-0077: added changePassword and removeRegistration methods
Goffi <goffi@goffi.org>
parents:
2172
diff
changeset
|
339 @staticmethod |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
340 def build_register_iq(xmlstream, jid_, password, email=None): |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
341 iq_elt = xmlstream_mod.IQ(xmlstream, "set") |
2175
75002ac33801
plugin XEP-0077: added changePassword and removeRegistration methods
Goffi <goffi@goffi.org>
parents:
2172
diff
changeset
|
342 iq_elt["to"] = jid_.host |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
343 query_elt = iq_elt.addElement(("jabber:iq:register", "query")) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
344 username_elt = query_elt.addElement("username") |
2175
75002ac33801
plugin XEP-0077: added changePassword and removeRegistration methods
Goffi <goffi@goffi.org>
parents:
2172
diff
changeset
|
345 username_elt.addContent(jid_.user) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
346 password_elt = query_elt.addElement("password") |
2175
75002ac33801
plugin XEP-0077: added changePassword and removeRegistration methods
Goffi <goffi@goffi.org>
parents:
2172
diff
changeset
|
347 password_elt.addContent(password) |
75002ac33801
plugin XEP-0077: added changePassword and removeRegistration methods
Goffi <goffi@goffi.org>
parents:
2172
diff
changeset
|
348 if email is not None: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
349 email_elt = query_elt.addElement("email") |
2175
75002ac33801
plugin XEP-0077: added changePassword and removeRegistration methods
Goffi <goffi@goffi.org>
parents:
2172
diff
changeset
|
350 email_elt.addContent(email) |
75002ac33801
plugin XEP-0077: added changePassword and removeRegistration methods
Goffi <goffi@goffi.org>
parents:
2172
diff
changeset
|
351 return iq_elt |
75002ac33801
plugin XEP-0077: added changePassword and removeRegistration methods
Goffi <goffi@goffi.org>
parents:
2172
diff
changeset
|
352 |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
353 def _in_band_register(self, to_jid_s, profile_key=C.PROF_KEY_NONE): |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
354 client = self.host.get_client(profile_key) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
355 return defer.ensureDeferred(self.in_band_register(client, jid.JID(to_jid_s))) |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
356 |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
357 async def in_band_register( |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
358 self, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
359 client: SatXMPPEntity, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
360 to_jid: jid.JID, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
361 post_treat_cb: Callable | None = None, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
362 ) -> xml_tools.XMLUI: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
363 """Register to a service. |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
364 |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
365 Send an IQ request to register with the given service and return the registration |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
366 form as XML UI. |
587
952322b1d490
Remove trailing whitespaces.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
572
diff
changeset
|
367 |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
368 @param client: client session. |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
369 @param to_jid: The JID of the service to register to. |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
370 @param post_treat_cb: A callback function to handle the registration result, if |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
371 provided. |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
372 @return: The registration form as XML UI. |
2177
09cfec4d8d19
plugin XEP-0077: added inBandAccountNew, inBandUnregister and inBandPasswordChange bridge methods
Goffi <goffi@goffi.org>
parents:
2175
diff
changeset
|
373 """ |
09cfec4d8d19
plugin XEP-0077: added inBandAccountNew, inBandUnregister and inBandPasswordChange bridge methods
Goffi <goffi@goffi.org>
parents:
2175
diff
changeset
|
374 # FIXME: this post_treat_cb arguments seems wrong, check it |
3028 | 375 log.debug(_("Asking registration for {}").format(to_jid.full())) |
376 reg_request = client.IQ("get") | |
594
e629371a28d3
Fix pep8 support in src/plugins.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents:
588
diff
changeset
|
377 reg_request["from"] = client.jid.full() |
30
d6b613764dd7
new plugin for xep 0077 (In-Band registration): first draft
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
378 reg_request["to"] = to_jid.full() |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
379 reg_request.addElement("query", NS_IQ_REGISTER) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
380 try: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
381 iq_result_elt = await reg_request.send(to_jid.full()) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
382 except Exception as e: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
383 log.warning(_("Registration failure: {}").format(e)) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
384 raise e |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
385 else: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
386 try: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
387 query_elt = next(iq_result_elt.elements(NS_IQ_REGISTER, "query")) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
388 except StopIteration: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
389 raise exceptions.DataError( |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
390 f"Can't find expected query element: {iq_result_elt.toXml()}" |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
391 ) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
392 |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
393 try: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
394 x_elem = next(query_elt.elements(data_form.NS_X_DATA, "x")) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
395 except StopIteration: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
396 # XXX: it seems we have an old service which doesn't manage data forms |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
397 log.warning("Can't find data form: {iq_result_elt.toXml()}") |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
398 raise exceptions.DataError( |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
399 _( |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
400 "This gateway is outdated and can't be managed by Libervia, " |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
401 "sorry :(" |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
402 ) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
403 ) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
404 |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
405 form = data_form.Form.fromElement(x_elem) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
406 xml_ui = xml_tools.data_form_2_xmlui(form, "") |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
407 d = xml_tools.deferred_ui(self.host, xml_ui) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
408 d.addCallback( |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
409 self._on_xml_ui_cb, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
410 client, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
411 iq_result_elt["id"], |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
412 iq_result_elt["from"], |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
413 post_treat_cb, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
414 ) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
415 d.addErrback(self._on_xml_ui_eb) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
416 d.addTimeout(600, cast(IReactorCore, reactor)) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
417 return xml_ui |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
418 |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
419 @ensure_deferred |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
420 async def _on_xml_ui_cb( |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
421 self, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
422 data: dict, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
423 client: SatXMPPEntity, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
424 stanza_id: str, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
425 to_: str, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
426 post_treat_cb: Callable | None, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
427 ) -> None: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
428 """Handle the XML UI result of a registration form. |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
429 |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
430 Process the filled registration form (from frontend) and send it back to complete |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
431 the registration process. |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
432 |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
433 @param data: The filled registration form as a XMLUI Form result. |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
434 @param client: Client session. |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
435 @param stanza_id: The ID of the IQ stanza of the registration process. |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
436 @param to_: The JID of the service that sent the registration form. |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
437 @param post_treat_cb: A callback function to handle the registration result, if |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
438 provided. |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
439 """ |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
440 form_elt = xml_tools.xmlui_result_to_elt(data, NS_IQ_REGISTER) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
441 |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
442 iq_elt = client.IQ() |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
443 iq_elt["id"] = stanza_id |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
444 iq_elt["to"] = to_ |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
445 query_elt = iq_elt.addElement("query", NS_IQ_REGISTER) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
446 query_elt.addChild(form_elt) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
447 try: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
448 answer = await iq_elt.send() |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
449 log.debug(_("registration answer: %s") % answer.toXml()) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
450 if post_treat_cb is not None: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
451 post_treat_cb(jid.JID(answer["from"]), client.profile) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
452 except jabber_error.StanzaError as e: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
453 log.info(_("Registration failure: {}").format(e)) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
454 if e.condition == "conflict": |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
455 raise exceptions.ConflictError( |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
456 _("Username already exists, please choose another one.") |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
457 ) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
458 raise e |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
459 |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
460 def _on_xml_ui_eb(self, failure_: Failure) -> None: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
461 """Handle error during handling of registration form by frontend.""" |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
462 log.warning(f"Error while handling registration form to frontend: {failure_}") |
2172
545a1261ac3b
core, plugin XEP-0077: in-band registration fix and move:
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
463 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
464 def _register_new_account(self, jid_, password, email, host, port): |
2177
09cfec4d8d19
plugin XEP-0077: added inBandAccountNew, inBandUnregister and inBandPasswordChange bridge methods
Goffi <goffi@goffi.org>
parents:
2175
diff
changeset
|
465 kwargs = {} |
09cfec4d8d19
plugin XEP-0077: added inBandAccountNew, inBandUnregister and inBandPasswordChange bridge methods
Goffi <goffi@goffi.org>
parents:
2175
diff
changeset
|
466 if email: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
467 kwargs["email"] = email |
2177
09cfec4d8d19
plugin XEP-0077: added inBandAccountNew, inBandUnregister and inBandPasswordChange bridge methods
Goffi <goffi@goffi.org>
parents:
2175
diff
changeset
|
468 if host: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
469 kwargs["host"] = host |
2177
09cfec4d8d19
plugin XEP-0077: added inBandAccountNew, inBandUnregister and inBandPasswordChange bridge methods
Goffi <goffi@goffi.org>
parents:
2175
diff
changeset
|
470 if port: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
471 kwargs["port"] = port |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
472 return self.register_new_account(jid.JID(jid_), password, **kwargs) |
2177
09cfec4d8d19
plugin XEP-0077: added inBandAccountNew, inBandUnregister and inBandPasswordChange bridge methods
Goffi <goffi@goffi.org>
parents:
2175
diff
changeset
|
473 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
474 def register_new_account( |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
475 self, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
476 jid_: jid.JID, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
477 password: str, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
478 email: str | None = None, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
479 host: str | None = None, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
480 port: int = C.XMPP_C2S_PORT, |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
481 ): |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
482 """Register a new account on a XMPP server. |
2172
545a1261ac3b
core, plugin XEP-0077: in-band registration fix and move:
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
483 |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
484 @param jid_: request jid to register |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
485 @param password: password of the account |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
486 @param email: email of the account |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
487 @param host: host of the server to register to |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
488 @param port: port of the server to register to |
2172
545a1261ac3b
core, plugin XEP-0077: in-band registration fix and move:
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
489 """ |
3426
8c25489bb79c
plugin XEP-0077: use `xmpp_domain` when set for `host`
Goffi <goffi@goffi.org>
parents:
3400
diff
changeset
|
490 if host is None: |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
491 host = self.host.memory.config_get("", "xmpp_domain", "127.0.0.1") |
3028 | 492 check_certificate = host != "127.0.0.1" |
2838
8018cf9aa55b
plugin XEP-0077: correctly report invalid certificate + errback on unexpected stream close
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
493 authenticator = RegisteringAuthenticator( |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
494 jid_, password, email, check_certificate=check_certificate |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
495 ) |
2172
545a1261ac3b
core, plugin XEP-0077: in-band registration fix and move:
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
496 registered_d = authenticator.registered |
2838
8018cf9aa55b
plugin XEP-0077: correctly report invalid certificate + errback on unexpected stream close
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
497 server_register = ServerRegister(authenticator) |
8018cf9aa55b
plugin XEP-0077: correctly report invalid certificate + errback on unexpected stream close
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
498 reactor.connectTCP(host, port, server_register) |
2172
545a1261ac3b
core, plugin XEP-0077: in-band registration fix and move:
Goffi <goffi@goffi.org>
parents:
2145
diff
changeset
|
499 return registered_d |
2175
75002ac33801
plugin XEP-0077: added changePassword and removeRegistration methods
Goffi <goffi@goffi.org>
parents:
2172
diff
changeset
|
500 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
501 def _change_password(self, new_password, profile_key): |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
502 client = self.host.get_client(profile_key) |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
503 return self.change_password(client, new_password) |
2177
09cfec4d8d19
plugin XEP-0077: added inBandAccountNew, inBandUnregister and inBandPasswordChange bridge methods
Goffi <goffi@goffi.org>
parents:
2175
diff
changeset
|
504 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
505 def change_password(self, client, new_password): |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
506 iq_elt = self.build_register_iq(client.xmlstream, client.jid, new_password) |
2177
09cfec4d8d19
plugin XEP-0077: added inBandAccountNew, inBandUnregister and inBandPasswordChange bridge methods
Goffi <goffi@goffi.org>
parents:
2175
diff
changeset
|
507 d = iq_elt.send(client.jid.host) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
508 d.addCallback( |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
509 lambda __: self.host.memory.param_set( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
510 "Password", new_password, "Connection", profile_key=client.profile |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
511 ) |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
512 ) |
2177
09cfec4d8d19
plugin XEP-0077: added inBandAccountNew, inBandUnregister and inBandPasswordChange bridge methods
Goffi <goffi@goffi.org>
parents:
2175
diff
changeset
|
513 return d |
09cfec4d8d19
plugin XEP-0077: added inBandAccountNew, inBandUnregister and inBandPasswordChange bridge methods
Goffi <goffi@goffi.org>
parents:
2175
diff
changeset
|
514 |
09cfec4d8d19
plugin XEP-0077: added inBandAccountNew, inBandUnregister and inBandPasswordChange bridge methods
Goffi <goffi@goffi.org>
parents:
2175
diff
changeset
|
515 def _unregister(self, to_jid_s, profile_key): |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
516 client = self.host.get_client(profile_key) |
2177
09cfec4d8d19
plugin XEP-0077: added inBandAccountNew, inBandUnregister and inBandPasswordChange bridge methods
Goffi <goffi@goffi.org>
parents:
2175
diff
changeset
|
517 return self.unregister(client, jid.JID(to_jid_s)) |
2175
75002ac33801
plugin XEP-0077: added changePassword and removeRegistration methods
Goffi <goffi@goffi.org>
parents:
2172
diff
changeset
|
518 |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
519 def unregister(self, client: SatXMPPEntity, to_jid: jid.JID) -> defer.Deferred: |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
520 """Remove registration from a server/service. |
2177
09cfec4d8d19
plugin XEP-0077: added inBandAccountNew, inBandUnregister and inBandPasswordChange bridge methods
Goffi <goffi@goffi.org>
parents:
2175
diff
changeset
|
521 |
09cfec4d8d19
plugin XEP-0077: added inBandAccountNew, inBandUnregister and inBandPasswordChange bridge methods
Goffi <goffi@goffi.org>
parents:
2175
diff
changeset
|
522 BEWARE! if you remove registration from profile own server, this will |
09cfec4d8d19
plugin XEP-0077: added inBandAccountNew, inBandUnregister and inBandPasswordChange bridge methods
Goffi <goffi@goffi.org>
parents:
2175
diff
changeset
|
523 DELETE THE XMPP ACCOUNT WITHOUT WARNING |
3334
2cd54c72fae4
plugin XEP-0077: None can now be used in `to_jid` argument in `unregister`:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
524 @param to_jid: jid of the service or server |
2cd54c72fae4
plugin XEP-0077: None can now be used in `to_jid` argument in `unregister`:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
525 None to delete client's account (DANGEROUS!) |
2177
09cfec4d8d19
plugin XEP-0077: added inBandAccountNew, inBandUnregister and inBandPasswordChange bridge methods
Goffi <goffi@goffi.org>
parents:
2175
diff
changeset
|
526 """ |
2175
75002ac33801
plugin XEP-0077: added changePassword and removeRegistration methods
Goffi <goffi@goffi.org>
parents:
2172
diff
changeset
|
527 iq_elt = client.IQ() |
3334
2cd54c72fae4
plugin XEP-0077: None can now be used in `to_jid` argument in `unregister`:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
528 if to_jid is not None: |
2cd54c72fae4
plugin XEP-0077: None can now be used in `to_jid` argument in `unregister`:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
529 iq_elt["to"] = to_jid.full() |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
530 query_elt = iq_elt.addElement((NS_IQ_REGISTER, "query")) |
3028 | 531 query_elt.addElement("remove") |
3400
77ad87763f32
plugin XEP-0077: disconnect client when deleting self account:
Goffi <goffi@goffi.org>
parents:
3354
diff
changeset
|
532 d = iq_elt.send() |
77ad87763f32
plugin XEP-0077: disconnect client when deleting self account:
Goffi <goffi@goffi.org>
parents:
3354
diff
changeset
|
533 if not to_jid or to_jid == jid.JID(client.jid.host): |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
534 d.addCallback(lambda __: client.entity_disconnect()) |
3400
77ad87763f32
plugin XEP-0077: disconnect client when deleting self account:
Goffi <goffi@goffi.org>
parents:
3354
diff
changeset
|
535 return d |
4300
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
536 |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
537 |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
538 @implementer(iwokkel.IDisco) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
539 class XEP_0077_handler(xmlstream_mod.XMPPHandler): |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
540 |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
541 def __init__(self, plugin_parent: XEP_0077) -> None: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
542 self.plugin_parent = plugin_parent |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
543 |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
544 def connectionInitialized(self): |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
545 client = cast(SatXMPPEntity, self.parent) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
546 if client.is_component: |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
547 self.xmlstream.addObserver( |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
548 IQ_REGISTER_REQUEST, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
549 self.plugin_parent._on_register_request, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
550 client=client, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
551 ) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
552 self.xmlstream.addObserver( |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
553 IQ_SUBMIT_REQUEST, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
554 self.plugin_parent._on_submit_request, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
555 client=client, |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
556 ) |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
557 |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
558 def getDiscoInfo(self, requestor, target, nodeIdentifier=""): |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
559 return [disco.DiscoFeature(NS_IQ_REGISTER)] |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
560 |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
561 def getDiscoItems(self, requestor, target, nodeIdentifier=""): |
7ded09452875
plugin XEP-0077, XEP-0100: Adapt to component, and modernize:
Goffi <goffi@goffi.org>
parents:
4270
diff
changeset
|
562 return [] |