Mercurial > libervia-backend
annotate libervia/backend/plugins/plugin_misc_email_invitation.py @ 4320:9658c534287e
plugin XEP-0215, XEP-0376: fix bad calls to `hasFeature`:
`hasFeature` was called like blocking code, missing the `await`. This has been fixed, and
is now using the `memory.disco.has_feature` version.
author | Goffi <goffi@goffi.org> |
---|---|
date | Mon, 30 Sep 2024 14:14:38 +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 |