Mercurial > libervia-backend
annotate libervia/backend/plugins/plugin_misc_email_invitation.py @ 4309:b56b1eae7994
component email gateway: add multicasting:
XEP-0033 multicasting is now supported both for incoming and outgoing messages. XEP-0033
metadata are converted to suitable Email headers and vice versa.
Email address and JID are both supported, and delivery is done by the gateway when
suitable on incoming messages.
rel 450
author | Goffi <goffi@goffi.org> |
---|---|
date | Thu, 26 Sep 2024 16:12:01 +0200 |
parents | 0d7bb4df2343 |
children |
rev | line source |
---|---|
3028 | 1 #!/usr/bin/env python3 |
3137 | 2 |
3323
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
3 # SàT plugin for sending invitations by email |
3479 | 4 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org) |
2184 | 5 |
6 # This program is free software: you can redistribute it and/or modify | |
7 # it under the terms of the GNU Affero General Public License as published by | |
8 # the Free Software Foundation, either version 3 of the License, or | |
9 # (at your option) any later version. | |
10 | |
11 # This program is distributed in the hope that it will be useful, | |
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 # GNU Affero General Public License for more details. | |
15 | |
16 # You should have received a copy of the GNU Affero General Public License | |
17 # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
18 | |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
19 import shortuuid |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
20 from typing import Optional |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
21 from twisted.internet import defer |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
22 from twisted.words.protocols.jabber import jid |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
23 from twisted.words.protocols.jabber import error |
3337
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
24 from twisted.words.protocols.jabber import sasl |
4071
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
25 from libervia.backend.core.i18n import _, D_ |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
26 from libervia.backend.core.constants import Const as C |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
27 from libervia.backend.core import exceptions |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
28 from libervia.backend.core.log import getLogger |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
29 from libervia.backend.tools import utils |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
30 from libervia.backend.tools.common import data_format |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
31 from libervia.backend.memory import persistent |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
32 from libervia.backend.tools.common import email as sat_email |
2184 | 33 |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
34 log = getLogger(__name__) |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
35 |
2184 | 36 |
37 PLUGIN_INFO = { | |
3335
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
38 C.PI_NAME: "Email Invitations", |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2909
diff
changeset
|
39 C.PI_IMPORT_NAME: "EMAIL_INVITATION", |
2184 | 40 C.PI_TYPE: C.PLUG_TYPE_MISC, |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
41 C.PI_DEPENDENCIES: ["XEP-0077"], |
2256
61e836cc9512
plugin invitations: name is now registered as nickname on XMPP server thanks to plugin identity
Goffi <goffi@goffi.org>
parents:
2255
diff
changeset
|
42 C.PI_RECOMMENDATIONS: ["IDENTITY"], |
2184 | 43 C.PI_MAIN: "InvitationsPlugin", |
44 C.PI_HANDLER: "no", | |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
45 C.PI_DESCRIPTION: _("""invitation of people without XMPP account"""), |
2184 | 46 } |
47 | |
48 | |
49 SUFFIX_MAX = 5 | |
3028 | 50 INVITEE_PROFILE_TPL = "guest@@{uuid}" |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
51 KEY_ID = "id" |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
52 KEY_JID = "jid" |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
53 KEY_CREATED = "created" |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
54 KEY_LAST_CONNECTION = "last_connection" |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
55 KEY_GUEST_PROFILE = "guest_profile" |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
56 KEY_PASSWORD = "password" |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
57 KEY_EMAILS_EXTRA = "emails_extra" |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
58 EXTRA_RESERVED = { |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
59 KEY_ID, |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
60 KEY_JID, |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
61 KEY_CREATED, |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
62 "jid_", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
63 "jid", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
64 KEY_LAST_CONNECTION, |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
65 KEY_GUEST_PROFILE, |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
66 KEY_PASSWORD, |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
67 KEY_EMAILS_EXTRA, |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
68 } |
3028 | 69 DEFAULT_SUBJECT = D_("You have been invited by {host_name} to {app_name}") |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
70 DEFAULT_BODY = D_( |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
71 """Hello {name}! |
2184 | 72 |
73 You have received an invitation from {host_name} to participate to "{app_name}". | |
74 To join, you just have to click on the following URL: | |
75 {url} | |
76 | |
77 Please note that this URL should not be shared with anybody! | |
78 If you want more details on {app_name}, you can check {app_url}. | |
79 | |
80 Welcome! | |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
81 """ |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
82 ) |
2184 | 83 |
84 | |
85 class InvitationsPlugin(object): | |
86 | |
87 def __init__(self, host): | |
3028 | 88 log.info(_("plugin Invitations initialization")) |
2184 | 89 self.host = host |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
90 self.invitations = persistent.LazyPersistentBinaryDict("invitations") |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
91 host.bridge.add_method( |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
92 "invitation_create", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
93 ".plugin", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
94 in_sign="sasssssssssa{ss}s", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
95 out_sign="a{ss}", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
96 method=self._create, |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
97 async_=True, |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
98 ) |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
99 host.bridge.add_method( |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
100 "invitation_get", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
101 ".plugin", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
102 in_sign="s", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
103 out_sign="a{ss}", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
104 method=self.get, |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
105 async_=True, |
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 host.bridge.add_method( |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
108 "invitation_delete", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
109 ".plugin", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
110 in_sign="s", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
111 out_sign="", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
112 method=self._delete, |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
113 async_=True, |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
114 ) |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
115 host.bridge.add_method( |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
116 "invitation_modify", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
117 ".plugin", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
118 in_sign="sa{ss}b", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
119 out_sign="", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
120 method=self._modify, |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
121 async_=True, |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
122 ) |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
123 host.bridge.add_method( |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
124 "invitation_list", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
125 ".plugin", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
126 in_sign="s", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
127 out_sign="a{sa{ss}}", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
128 method=self._list, |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
129 async_=True, |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
130 ) |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
131 host.bridge.add_method( |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
132 "invitation_simple_create", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
133 ".plugin", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
134 in_sign="sssss", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
135 out_sign="a{ss}", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
136 method=self._simple_create, |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
137 async_=True, |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
138 ) |
2212
eaf2467d19ce
plugin invitations: added getInvitation method, it return invitation data and raise an error if it is not found
Goffi <goffi@goffi.org>
parents:
2211
diff
changeset
|
139 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
140 def check_extra(self, extra): |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
141 if EXTRA_RESERVED.intersection(extra): |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
142 raise ValueError( |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
143 _( |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
144 "You can't use following key(s) in extra, they are reserved: {}" |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
145 ).format(", ".join(EXTRA_RESERVED.intersection(extra))) |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
146 ) |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
147 |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
148 def _create( |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
149 self, |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
150 email="", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
151 emails_extra=None, |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
152 jid_="", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
153 password="", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
154 name="", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
155 host_name="", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
156 language="", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
157 url_template="", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
158 message_subject="", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
159 message_body="", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
160 extra=None, |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
161 profile="", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
162 ): |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
163 # XXX: we don't use **kwargs here to keep arguments name for introspection with |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
164 # D-Bus bridge |
2291
c05000d00dbb
plugin events, invitations + jp (event/create, invitation/invitee/invite): several emails addresses can now be specified for a single invitation:
Goffi <goffi@goffi.org>
parents:
2256
diff
changeset
|
165 if emails_extra is None: |
c05000d00dbb
plugin events, invitations + jp (event/create, invitation/invitee/invite): several emails addresses can now be specified for a single invitation:
Goffi <goffi@goffi.org>
parents:
2256
diff
changeset
|
166 emails_extra = [] |
2184 | 167 |
168 if extra is None: | |
169 extra = {} | |
170 else: | |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
171 extra = {str(k): str(v) for k, v in extra.items()} |
2184 | 172 |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
173 kwargs = {"extra": extra, KEY_EMAILS_EXTRA: [str(e) for e in emails_extra]} |
2291
c05000d00dbb
plugin events, invitations + jp (event/create, invitation/invitee/invite): several emails addresses can now be specified for a single invitation:
Goffi <goffi@goffi.org>
parents:
2256
diff
changeset
|
174 |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
175 # we need to be sure that values are unicode, else they won't be pickled correctly |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
176 # with D-Bus |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
177 for key in ( |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
178 "jid_", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
179 "password", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
180 "name", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
181 "host_name", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
182 "email", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
183 "language", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
184 "url_template", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
185 "message_subject", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
186 "message_body", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
187 "profile", |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
188 ): |
2184 | 189 value = locals()[key] |
190 if value: | |
3028 | 191 kwargs[key] = str(value) |
3335
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
192 return defer.ensureDeferred(self.create(**kwargs)) |
2184 | 193 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
194 async def get_existing_invitation(self, email: Optional[str]) -> Optional[dict]: |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
195 """Retrieve existing invitation with given email |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
196 |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
197 @param email: check if any invitation exist with this email |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
198 @return: first found invitation, or None if nothing found |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
199 """ |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
200 # FIXME: This method is highly inefficient, it get all invitations and check them |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
201 # one by one, this is just a temporary way to avoid creating creating new accounts |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
202 # for an existing email. A better way will be available with Libervia 0.9. |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
203 # TODO: use a better way to check existing invitations |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
204 |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
205 if email is None: |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
206 return None |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
207 all_invitations = await self.invitations.all() |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
208 for id_, invitation in all_invitations.items(): |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
209 if invitation.get("email") == email: |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
210 invitation[KEY_ID] = id_ |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
211 return invitation |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
212 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
213 async def _create_account_and_profile( |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
214 self, id_: str, kwargs: dict, extra: dict |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
215 ) -> None: |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
216 """Create XMPP account and Libervia profile for guest""" |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
217 ## XMPP account creation |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
218 password = kwargs.pop("password", None) |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
219 if password is None: |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
220 password = utils.generate_password() |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
221 assert password |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
222 # XXX: password is here saved in clear in database |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
223 # it is needed for invitation as the same password is used for profile |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
224 # and SàT need to be able to automatically open the profile with the uuid |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
225 # FIXME: we could add an extra encryption key which would be used with the |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
226 # uuid when the invitee is connecting (e.g. with URL). This key would |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
227 # not be saved and could be used to encrypt profile password. |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
228 extra[KEY_PASSWORD] = password |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
229 |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
230 jid_ = kwargs.pop("jid_", None) |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
231 if not jid_: |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
232 domain = self.host.memory.config_get(None, "xmpp_domain") |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
233 if not domain: |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
234 # TODO: fallback to profile's domain |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
235 raise ValueError(_("You need to specify xmpp_domain in sat.conf")) |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
236 jid_ = "invitation-{uuid}@{domain}".format( |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
237 uuid=shortuuid.uuid(), domain=domain |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
238 ) |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
239 jid_ = jid.JID(jid_) |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
240 extra[KEY_JID] = jid_.full() |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
241 |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
242 if jid_.user: |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
243 # we don't register account if there is no user as anonymous login is then |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
244 # used |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
245 try: |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
246 await self.host.plugins["XEP-0077"].register_new_account(jid_, password) |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
247 except error.StanzaError as e: |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
248 prefix = jid_.user |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
249 idx = 0 |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
250 while e.condition == "conflict": |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
251 if idx >= SUFFIX_MAX: |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
252 raise exceptions.ConflictError(_("Can't create XMPP account")) |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
253 jid_.user = prefix + "_" + str(idx) |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
254 log.info( |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
255 _( |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
256 "requested jid already exists, trying with {}".format( |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
257 jid_.full() |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
258 ) |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
259 ) |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
260 ) |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
261 try: |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
262 await self.host.plugins["XEP-0077"].register_new_account( |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
263 jid_, password |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
264 ) |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
265 except error.StanzaError: |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
266 idx += 1 |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
267 else: |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
268 break |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
269 if e.condition != "conflict": |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
270 raise e |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
271 |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
272 log.info(_("account {jid_} created").format(jid_=jid_.full())) |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
273 |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
274 ## profile creation |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
275 |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
276 extra[KEY_GUEST_PROFILE] = guest_profile = INVITEE_PROFILE_TPL.format(uuid=id_) |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
277 # profile creation should not fail as we generate unique name ourselves |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
278 await self.host.memory.create_profile(guest_profile, password) |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
279 await self.host.memory.start_session(password, guest_profile) |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
280 await self.host.memory.param_set( |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
281 "JabberID", jid_.full(), "Connection", profile_key=guest_profile |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
282 ) |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
283 await self.host.memory.param_set( |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
284 "Password", password, "Connection", profile_key=guest_profile |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
285 ) |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
286 |
3335
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
287 async def create(self, **kwargs): |
3028 | 288 r"""Create an invitation |
2184 | 289 |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
290 This will create an XMPP account and a profile, and use a UUID to retrieve them. |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
291 The profile is automatically generated in the form guest@@[UUID], this way they |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
292 can be retrieved easily |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
293 **kwargs: keywords arguments which can have the following keys, unset values are |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
294 equivalent to None: |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
295 jid_(jid.JID, None): jid to use for invitation, the jid will be created using |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
296 XEP-0077 |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
297 if the jid has no user part, an anonymous account will be used (no XMPP |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
298 account created in this case) |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
299 if None, automatically generate an account name (in the form |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
300 "invitation-[random UUID]@domain.tld") (note that this UUID is not the |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
301 same as the invitation one, as jid can be used publicly (leaking the |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
302 UUID), and invitation UUID give access to account. |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
303 in case of conflict, a suffix number is added to the account until a free |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
304 one if found (with a failure if SUFFIX_MAX is reached) |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
305 password(unicode, None): password to use (will be used for XMPP account and |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
306 profile) |
2184 | 307 None to automatically generate one |
308 name(unicode, None): name of the invitee | |
2256
61e836cc9512
plugin invitations: name is now registered as nickname on XMPP server thanks to plugin identity
Goffi <goffi@goffi.org>
parents:
2255
diff
changeset
|
309 will be set as profile identity if present |
2184 | 310 host_name(unicode, None): name of the host |
311 email(unicode, None): email to send the invitation to | |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
312 if None, no invitation email is sent, you can still associate email using |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
313 extra |
2184 | 314 if email is used, extra can't have "email" key |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
315 language(unicode): language of the invitee (used notabily to translate the |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
316 invitation) |
2184 | 317 TODO: not used yet |
318 url_template(unicode, None): template to use to construct the invitation URL | |
319 use {uuid} as a placeholder for identifier | |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
320 use None if you don't want to include URL (or if it is already specified |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
321 in custom message) |
2184 | 322 /!\ you must put full URL, don't forget https:// |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
323 /!\ the URL will give access to the invitee account, you should warn in |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
324 message to not publish it publicly |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
325 message_subject(unicode, None): customised message body for the invitation |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
326 email |
2184 | 327 None to use default subject |
328 uses the same substitution as for message_body | |
329 message_body(unicode, None): customised message body for the invitation email | |
330 None to use default body | |
331 use {name} as a place holder for invitee name | |
332 use {url} as a placeholder for the invitation url | |
333 use {uuid} as a placeholder for the identifier | |
334 use {app_name} as a placeholder for this software name | |
335 use {app_url} as a placeholder for this software official website | |
336 use {profile} as a placeholder for host's profile | |
337 use {host_name} as a placeholder for host's name | |
338 extra(dict, None): extra data to associate with the invitee | |
339 some keys are reserved: | |
340 - created (creation date) | |
341 if email argument is used, "email" key can't be used | |
342 profile(unicode, None): profile of the host (person who is inviting) | |
2211
df115e4a36c7
plugin invitations: invitation id and invitee jid are now added to return dict in invitationCreate, bridge signature has changed too
Goffi <goffi@goffi.org>
parents:
2210
diff
changeset
|
343 @return (dict[unicode, unicode]): dictionary with: |
df115e4a36c7
plugin invitations: invitation id and invitee jid are now added to return dict in invitationCreate, bridge signature has changed too
Goffi <goffi@goffi.org>
parents:
2210
diff
changeset
|
344 - UUID associated with the invitee (key: id) |
2184 | 345 - filled extra dictionary, as saved in the databae |
346 """ | |
347 ## initial checks | |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
348 extra = kwargs.pop("extra", {}) |
2184 | 349 if set(kwargs).intersection(extra): |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
350 raise ValueError( |
3028 | 351 _("You can't use following key(s) in both args and extra: {}").format( |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
352 ", ".join(set(kwargs).intersection(extra)) |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
353 ) |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
354 ) |
2184 | 355 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
356 self.check_extra(extra) |
2184 | 357 |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
358 email = kwargs.pop("email", None) |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
359 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
360 existing = await self.get_existing_invitation(email) |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
361 if existing is not None: |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
362 log.info(f"There is already an invitation for {email!r}") |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
363 extra.update(existing) |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
364 del extra[KEY_ID] |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
365 |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
366 emails_extra = kwargs.pop("emails_extra", []) |
2291
c05000d00dbb
plugin events, invitations + jp (event/create, invitation/invitee/invite): several emails addresses can now be specified for a single invitation:
Goffi <goffi@goffi.org>
parents:
2256
diff
changeset
|
367 if not email and emails_extra: |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
368 raise ValueError( |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
369 _("You need to provide a main email address before using emails_extra") |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
370 ) |
2255
ba613d32ca60
plugin invitations: doesn't raise an exception anymore if url_template is not set while email is not requested
Goffi <goffi@goffi.org>
parents:
2241
diff
changeset
|
371 |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
372 if ( |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
373 email is not None |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
374 and not "url_template" in kwargs |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
375 and not "message_body" in kwargs |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
376 ): |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
377 raise ValueError( |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
378 _("You need to provide url_template if you use default message body") |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
379 ) |
2210
f8d61592f1fc
plugin invitations: raise ValueError if url_template and message_body are both not specified
Goffi <goffi@goffi.org>
parents:
2208
diff
changeset
|
380 |
2184 | 381 ## uuid |
3028 | 382 log.info(_("creating an invitation")) |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
383 id_ = existing[KEY_ID] if existing else str(shortuuid.uuid()) |
2184 | 384 |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
385 if existing is None: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
386 await self._create_account_and_profile(id_, kwargs, extra) |
2184 | 387 |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
388 profile = kwargs.pop("profile", None) |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
389 guest_profile = extra[KEY_GUEST_PROFILE] |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
390 jid_ = jid.JID(extra[KEY_JID]) |
2184 | 391 |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
392 ## identity |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
393 name = kwargs.pop("name", None) |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
394 password = extra[KEY_PASSWORD] |
2256
61e836cc9512
plugin invitations: name is now registered as nickname on XMPP server thanks to plugin identity
Goffi <goffi@goffi.org>
parents:
2255
diff
changeset
|
395 if name is not None: |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
396 extra["name"] = name |
2256
61e836cc9512
plugin invitations: name is now registered as nickname on XMPP server thanks to plugin identity
Goffi <goffi@goffi.org>
parents:
2255
diff
changeset
|
397 try: |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
398 id_plugin = self.host.plugins["IDENTITY"] |
2256
61e836cc9512
plugin invitations: name is now registered as nickname on XMPP server thanks to plugin identity
Goffi <goffi@goffi.org>
parents:
2255
diff
changeset
|
399 except KeyError: |
61e836cc9512
plugin invitations: name is now registered as nickname on XMPP server thanks to plugin identity
Goffi <goffi@goffi.org>
parents:
2255
diff
changeset
|
400 pass |
61e836cc9512
plugin invitations: name is now registered as nickname on XMPP server thanks to plugin identity
Goffi <goffi@goffi.org>
parents:
2255
diff
changeset
|
401 else: |
3335
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
402 await self.host.connect(guest_profile, password) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
403 guest_client = self.host.get_client(guest_profile) |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
404 await id_plugin.set_identity(guest_client, {"nicknames": [name]}) |
3335
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
405 await self.host.disconnect(guest_profile) |
2184 | 406 |
407 ## email | |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
408 language = kwargs.pop("language", None) |
2184 | 409 if language is not None: |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
410 extra["language"] = language.strip() |
2184 | 411 |
412 if email is not None: | |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
413 extra["email"] = email |
2291
c05000d00dbb
plugin events, invitations + jp (event/create, invitation/invitee/invite): several emails addresses can now be specified for a single invitation:
Goffi <goffi@goffi.org>
parents:
2256
diff
changeset
|
414 data_format.iter2dict(KEY_EMAILS_EXTRA, extra) |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
415 url_template = kwargs.pop("url_template", "") |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
416 format_args = {"uuid": id_, "app_name": C.APP_NAME, "app_url": C.APP_URL} |
2184 | 417 |
418 if name is None: | |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
419 format_args["name"] = email |
2184 | 420 else: |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
421 format_args["name"] = name |
2184 | 422 |
423 if profile is None: | |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
424 format_args["profile"] = "" |
2184 | 425 else: |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
426 format_args["profile"] = extra["profile"] = profile |
2184 | 427 |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
428 host_name = kwargs.pop("host_name", None) |
2184 | 429 if host_name is None: |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
430 format_args["host_name"] = profile or _("somebody") |
2184 | 431 else: |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
432 format_args["host_name"] = extra["host_name"] = host_name |
2184 | 433 |
434 invite_url = url_template.format(**format_args) | |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
435 format_args["url"] = invite_url |
2184 | 436 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
437 await sat_email.send_email( |
3040 | 438 self.host.memory.config, |
2291
c05000d00dbb
plugin events, invitations + jp (event/create, invitation/invitee/invite): several emails addresses can now be specified for a single invitation:
Goffi <goffi@goffi.org>
parents:
2256
diff
changeset
|
439 [email] + emails_extra, |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
440 (kwargs.pop("message_subject", None) or DEFAULT_SUBJECT).format( |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
441 **format_args |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
442 ), |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
443 (kwargs.pop("message_body", None) or DEFAULT_BODY).format(**format_args), |
2184 | 444 ) |
445 | |
3336
e38ddaf477bd
plugin email invitation: guests are now automatically added to host roster in `guests` group
Goffi <goffi@goffi.org>
parents:
3335
diff
changeset
|
446 ## roster |
e38ddaf477bd
plugin email invitation: guests are now automatically added to host roster in `guests` group
Goffi <goffi@goffi.org>
parents:
3335
diff
changeset
|
447 |
e38ddaf477bd
plugin email invitation: guests are now automatically added to host roster in `guests` group
Goffi <goffi@goffi.org>
parents:
3335
diff
changeset
|
448 # we automatically add guest to host roster (if host is specified) |
e38ddaf477bd
plugin email invitation: guests are now automatically added to host roster in `guests` group
Goffi <goffi@goffi.org>
parents:
3335
diff
changeset
|
449 # FIXME: a parameter to disable auto roster adding would be nice |
e38ddaf477bd
plugin email invitation: guests are now automatically added to host roster in `guests` group
Goffi <goffi@goffi.org>
parents:
3335
diff
changeset
|
450 if profile is not None: |
e38ddaf477bd
plugin email invitation: guests are now automatically added to host roster in `guests` group
Goffi <goffi@goffi.org>
parents:
3335
diff
changeset
|
451 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
452 client = self.host.get_client(profile) |
3336
e38ddaf477bd
plugin email invitation: guests are now automatically added to host roster in `guests` group
Goffi <goffi@goffi.org>
parents:
3335
diff
changeset
|
453 except Exception as e: |
e38ddaf477bd
plugin email invitation: guests are now automatically added to host roster in `guests` group
Goffi <goffi@goffi.org>
parents:
3335
diff
changeset
|
454 log.error(f"Can't get host profile: {profile}: {e}") |
e38ddaf477bd
plugin email invitation: guests are now automatically added to host roster in `guests` group
Goffi <goffi@goffi.org>
parents:
3335
diff
changeset
|
455 else: |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
456 await self.host.contact_update(client, jid_, name, ["guests"]) |
2184 | 457 |
458 if kwargs: | |
3028 | 459 log.warning(_("Not all arguments have been consumed: {}").format(kwargs)) |
2184 | 460 |
3335
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
461 ## extra data saving |
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
462 self.invitations[id_] = extra |
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
463 |
2211
df115e4a36c7
plugin invitations: invitation id and invitee jid are now added to return dict in invitationCreate, bridge signature has changed too
Goffi <goffi@goffi.org>
parents:
2210
diff
changeset
|
464 extra[KEY_ID] = id_ |
2212
eaf2467d19ce
plugin invitations: added getInvitation method, it return invitation data and raise an error if it is not found
Goffi <goffi@goffi.org>
parents:
2211
diff
changeset
|
465 |
3335
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
466 return extra |
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
467 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
468 def _simple_create(self, invitee_email, invitee_name, url_template, extra_s, profile): |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
469 client = self.host.get_client(profile) |
3323
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
470 # FIXME: needed because python-dbus use a specific string class |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
471 invitee_email = str(invitee_email) |
3335
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
472 invitee_name = str(invitee_name) |
3323
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
473 url_template = str(url_template) |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
474 extra = data_format.deserialise(extra_s) |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
475 d = defer.ensureDeferred( |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
476 self.simple_create(client, invitee_email, invitee_name, url_template, extra) |
3323
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
477 ) |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
478 d.addCallback(lambda data: {k: str(v) for k, v in data.items()}) |
3323
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
479 return d |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
480 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
481 async def simple_create( |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
482 self, client, invitee_email, invitee_name, url_template, extra |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
483 ): |
3323
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
484 """Simplified method to invite somebody by email""" |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
485 return await self.create( |
3335
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
486 name=invitee_name, |
3323
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
487 email=invitee_email, |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
488 url_template=url_template, |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
489 profile=client.profile, |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
490 ) |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
491 |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
492 def get(self, id_): |
2212
eaf2467d19ce
plugin invitations: added getInvitation method, it return invitation data and raise an error if it is not found
Goffi <goffi@goffi.org>
parents:
2211
diff
changeset
|
493 """Retrieve invitation linked to uuid if it exists |
eaf2467d19ce
plugin invitations: added getInvitation method, it return invitation data and raise an error if it is not found
Goffi <goffi@goffi.org>
parents:
2211
diff
changeset
|
494 |
eaf2467d19ce
plugin invitations: added getInvitation method, it return invitation data and raise an error if it is not found
Goffi <goffi@goffi.org>
parents:
2211
diff
changeset
|
495 @param id_(unicode): UUID linked to an invitation |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
496 @return (dict[unicode, unicode]): data associated to the invitation |
2212
eaf2467d19ce
plugin invitations: added getInvitation method, it return invitation data and raise an error if it is not found
Goffi <goffi@goffi.org>
parents:
2211
diff
changeset
|
497 @raise KeyError: there is not invitation with this id_ |
eaf2467d19ce
plugin invitations: added getInvitation method, it return invitation data and raise an error if it is not found
Goffi <goffi@goffi.org>
parents:
2211
diff
changeset
|
498 """ |
eaf2467d19ce
plugin invitations: added getInvitation method, it return invitation data and raise an error if it is not found
Goffi <goffi@goffi.org>
parents:
2211
diff
changeset
|
499 return self.invitations[id_] |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
500 |
3337
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
501 def _delete(self, id_): |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
502 return defer.ensureDeferred(self.delete(id_)) |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
503 |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
504 async def delete(self, id_): |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
505 """Delete an invitation data and associated XMPP account""" |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
506 log.info(f"deleting invitation {id_}") |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
507 data = await self.get(id_) |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
508 guest_profile = data["guest_profile"] |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
509 password = data["password"] |
3337
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
510 try: |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
511 await self.host.connect(guest_profile, password) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
512 guest_client = self.host.get_client(guest_profile) |
3337
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
513 # XXX: be extra careful to use guest_client and not client below, as this will |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
514 # delete the associated XMPP account |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
515 log.debug("deleting XMPP account") |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
516 await self.host.plugins["XEP-0077"].unregister(guest_client, None) |
3337
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
517 except (error.StanzaError, sasl.SASLAuthError) as e: |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
518 log.warning( |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
519 f"Can't delete {guest_profile}'s XMPP account, maybe it as already been " |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
520 f"deleted: {e}" |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
521 ) |
3337
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
522 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
523 await self.host.memory.profile_delete_async(guest_profile, True) |
3337
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
524 except Exception as e: |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
525 log.warning(f"Can't delete guest profile {guest_profile}: {e}") |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
526 log.debug("removing guest data") |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
527 await self.invitations.adel(id_) |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
528 log.info(f"{id_} invitation has been deleted") |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
529 |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
530 def _modify(self, id_, new_extra, replace): |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
531 return self.modify(id_, {str(k): str(v) for k, v in new_extra.items()}, replace) |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
532 |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
533 def modify(self, id_, new_extra, replace=False): |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
534 """Modify invitation data |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
535 |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
536 @param id_(unicode): UUID linked to an invitation |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
537 @param new_extra(dict[unicode, unicode]): data to update |
2241
f87b673c7d17
plugin invitations: on modify an empty value delete corresponding extra keys, and reserved keys are now ignored.
Goffi <goffi@goffi.org>
parents:
2230
diff
changeset
|
538 empty values will be deleted if replace is True |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
539 @param replace(bool): if True replace the data |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
540 else update them |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
541 @raise KeyError: there is not invitation with this id_ |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
542 """ |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
543 self.check_extra(new_extra) |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
544 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
545 def got_current_data(current_data): |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
546 if replace: |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
547 new_data = new_extra |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
548 for k in EXTRA_RESERVED: |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
549 try: |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
550 new_data[k] = current_data[k] |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
551 except KeyError: |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
552 continue |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
553 else: |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
554 new_data = current_data |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
555 for k, v in new_extra.items(): |
2241
f87b673c7d17
plugin invitations: on modify an empty value delete corresponding extra keys, and reserved keys are now ignored.
Goffi <goffi@goffi.org>
parents:
2230
diff
changeset
|
556 if k in EXTRA_RESERVED: |
3323
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
557 log.warning(_("Skipping reserved key {key}").format(key=k)) |
2241
f87b673c7d17
plugin invitations: on modify an empty value delete corresponding extra keys, and reserved keys are now ignored.
Goffi <goffi@goffi.org>
parents:
2230
diff
changeset
|
558 continue |
f87b673c7d17
plugin invitations: on modify an empty value delete corresponding extra keys, and reserved keys are now ignored.
Goffi <goffi@goffi.org>
parents:
2230
diff
changeset
|
559 if v: |
f87b673c7d17
plugin invitations: on modify an empty value delete corresponding extra keys, and reserved keys are now ignored.
Goffi <goffi@goffi.org>
parents:
2230
diff
changeset
|
560 new_data[k] = v |
f87b673c7d17
plugin invitations: on modify an empty value delete corresponding extra keys, and reserved keys are now ignored.
Goffi <goffi@goffi.org>
parents:
2230
diff
changeset
|
561 else: |
f87b673c7d17
plugin invitations: on modify an empty value delete corresponding extra keys, and reserved keys are now ignored.
Goffi <goffi@goffi.org>
parents:
2230
diff
changeset
|
562 try: |
f87b673c7d17
plugin invitations: on modify an empty value delete corresponding extra keys, and reserved keys are now ignored.
Goffi <goffi@goffi.org>
parents:
2230
diff
changeset
|
563 del new_data[k] |
f87b673c7d17
plugin invitations: on modify an empty value delete corresponding extra keys, and reserved keys are now ignored.
Goffi <goffi@goffi.org>
parents:
2230
diff
changeset
|
564 except KeyError: |
f87b673c7d17
plugin invitations: on modify an empty value delete corresponding extra keys, and reserved keys are now ignored.
Goffi <goffi@goffi.org>
parents:
2230
diff
changeset
|
565 pass |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
566 |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
567 self.invitations[id_] = new_data |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
568 |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
569 d = self.invitations[id_] |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
570 d.addCallback(got_current_data) |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
571 return d |
2230
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
572 |
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
573 def _list(self, profile=C.PROF_KEY_NONE): |
3335
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
574 return defer.ensureDeferred(self.list(profile)) |
2230
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
575 |
3335
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
576 async def list(self, profile=C.PROF_KEY_NONE): |
2230
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
577 """List invitations |
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
578 |
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
579 @param profile(unicode): return invitation linked to this profile only |
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
580 C.PROF_KEY_NONE: don't filter invitations |
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
581 @return list(unicode): invitations uids |
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
582 """ |
3335
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
583 invitations = await self.invitations.all() |
2230
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
584 if profile != C.PROF_KEY_NONE: |
4270
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
585 invitations = { |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
586 id_: data |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
587 for id_, data in invitations.items() |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
588 if data.get("profile") == profile |
0d7bb4df2343
Reformatted code base using black.
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
589 } |
2230
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
590 |
3335
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
591 return invitations |