Mercurial > libervia-backend
annotate libervia/backend/plugins/plugin_misc_email_invitation.py @ 4094:c3b68fdc2de7
component AP gateway: fix handling of XMPP comments authors:
the gateway was supposing that comments where emitted from PEP of author. While this is
the case for most blog posts, it's not for comments. Instead the component is now using
`author_jid` which is retrieved by XEP-0277 plugin, and reject the item if the auhor is
not verified (i.e. if `publisher` attribute is not set by XMPP service).
author | Goffi <goffi@goffi.org> |
---|---|
date | Mon, 12 Jun 2023 14:50:43 +0200 |
parents | 4b842c1fb686 |
children | 0d7bb4df2343 |
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, |
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", | |
3028 | 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}" |
51 KEY_ID = 'id' | |
52 KEY_JID = 'jid' | |
53 KEY_CREATED = 'created' | |
54 KEY_LAST_CONNECTION = 'last_connection' | |
55 KEY_GUEST_PROFILE = 'guest_profile' | |
56 KEY_PASSWORD = 'password' | |
57 KEY_EMAILS_EXTRA = 'emails_extra' | |
58 EXTRA_RESERVED = {KEY_ID, KEY_JID, KEY_CREATED, 'jid_', 'jid', KEY_LAST_CONNECTION, | |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
59 KEY_GUEST_PROFILE, KEY_PASSWORD, KEY_EMAILS_EXTRA} |
3028 | 60 DEFAULT_SUBJECT = D_("You have been invited by {host_name} to {app_name}") |
61 DEFAULT_BODY = D_("""Hello {name}! | |
2184 | 62 |
63 You have received an invitation from {host_name} to participate to "{app_name}". | |
64 To join, you just have to click on the following URL: | |
65 {url} | |
66 | |
67 Please note that this URL should not be shared with anybody! | |
68 If you want more details on {app_name}, you can check {app_url}. | |
69 | |
70 Welcome! | |
71 """) | |
72 | |
73 | |
74 class InvitationsPlugin(object): | |
75 | |
76 def __init__(self, host): | |
3028 | 77 log.info(_("plugin Invitations initialization")) |
2184 | 78 self.host = host |
3028 | 79 self.invitations = persistent.LazyPersistentBinaryDict('invitations') |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
80 host.bridge.add_method("invitation_create", ".plugin", in_sign='sasssssssssa{ss}s', |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
81 out_sign='a{ss}', |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
82 method=self._create, |
3028 | 83 async_=True) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
84 host.bridge.add_method("invitation_get", ".plugin", in_sign='s', out_sign='a{ss}', |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
85 method=self.get, |
3028 | 86 async_=True) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
87 host.bridge.add_method("invitation_delete", ".plugin", in_sign='s', out_sign='', |
3337
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
88 method=self._delete, |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
89 async_=True) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
90 host.bridge.add_method("invitation_modify", ".plugin", in_sign='sa{ss}b', |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
91 out_sign='', |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
92 method=self._modify, |
3028 | 93 async_=True) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
94 host.bridge.add_method("invitation_list", ".plugin", in_sign='s', |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
95 out_sign='a{sa{ss}}', |
2230
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
96 method=self._list, |
3028 | 97 async_=True) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
98 host.bridge.add_method("invitation_simple_create", ".plugin", in_sign='sssss', |
3323
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
99 out_sign='a{ss}', |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
100 method=self._simple_create, |
3323
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
101 async_=True) |
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
|
102 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
103 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
|
104 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
|
105 raise ValueError( |
3028 | 106 _("You can't use following key(s) in extra, they are reserved: {}") |
107 .format(', '.join(EXTRA_RESERVED.intersection(extra)))) | |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
108 |
3028 | 109 def _create(self, email='', emails_extra=None, jid_='', password='', name='', |
110 host_name='', language='', url_template='', message_subject='', | |
111 message_body='', extra=None, profile=''): | |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
112 # 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
|
113 # 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
|
114 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
|
115 emails_extra = [] |
2184 | 116 |
117 if extra is None: | |
118 extra = {} | |
119 else: | |
3028 | 120 extra = {str(k): str(v) for k,v in extra.items()} |
2184 | 121 |
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
|
122 kwargs = {"extra": extra, |
3028 | 123 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
|
124 } |
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
|
125 |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
126 # 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
|
127 # with D-Bus |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
128 for key in ("jid_", "password", "name", "host_name", "email", "language", |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
129 "url_template", "message_subject", "message_body", "profile"): |
2184 | 130 value = locals()[key] |
131 if value: | |
3028 | 132 kwargs[key] = str(value) |
3335
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
133 return defer.ensureDeferred(self.create(**kwargs)) |
2184 | 134 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
135 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
|
136 """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
|
137 |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
138 @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
|
139 @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
|
140 """ |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
141 # 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
|
142 # 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
|
143 # 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
|
144 # 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
|
145 |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
146 if email is None: |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
147 return None |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
148 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
|
149 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
|
150 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
|
151 invitation[KEY_ID] = id_ |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
152 return invitation |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
153 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
154 async def _create_account_and_profile( |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
155 self, |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
156 id_: str, |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
157 kwargs: dict, |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
158 extra: dict |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
159 ) -> None: |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
160 """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
|
161 ## XMPP account creation |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
162 password = kwargs.pop('password', None) |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
163 if password is None: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
164 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
|
165 assert password |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
166 # 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
|
167 # 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
|
168 # 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
|
169 # 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
|
170 # 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
|
171 # 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
|
172 extra[KEY_PASSWORD] = password |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
173 |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
174 jid_ = kwargs.pop('jid_', None) |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
175 if not jid_: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
176 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
|
177 if not domain: |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
178 # 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
|
179 raise ValueError(_("You need to specify xmpp_domain in sat.conf")) |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
180 jid_ = "invitation-{uuid}@{domain}".format(uuid=shortuuid.uuid(), |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
181 domain=domain) |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
182 jid_ = jid.JID(jid_) |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
183 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
|
184 |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
185 if jid_.user: |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
186 # 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
|
187 # used |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
188 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
189 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
|
190 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
|
191 prefix = jid_.user |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
192 idx = 0 |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
193 while e.condition == 'conflict': |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
194 if idx >= SUFFIX_MAX: |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
195 raise exceptions.ConflictError(_("Can't create XMPP account")) |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
196 jid_.user = prefix + '_' + str(idx) |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
197 log.info(_("requested jid already exists, trying with {}".format( |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
198 jid_.full()))) |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
199 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
200 await self.host.plugins['XEP-0077'].register_new_account( |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
201 jid_, |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
202 password |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
203 ) |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
204 except error.StanzaError: |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
205 idx += 1 |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
206 else: |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
207 break |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
208 if e.condition != 'conflict': |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
209 raise e |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
210 |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
211 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
|
212 |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
213 ## profile creation |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
214 |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
215 extra[KEY_GUEST_PROFILE] = guest_profile = INVITEE_PROFILE_TPL.format( |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
216 uuid=id_ |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
217 ) |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
218 # 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
|
219 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
|
220 await self.host.memory.start_session(password, guest_profile) |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
221 await self.host.memory.param_set("JabberID", jid_.full(), "Connection", |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
222 profile_key=guest_profile) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
223 await self.host.memory.param_set("Password", password, "Connection", |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
224 profile_key=guest_profile) |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
225 |
3335
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
226 async def create(self, **kwargs): |
3028 | 227 r"""Create an invitation |
2184 | 228 |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
229 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
|
230 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
|
231 can be retrieved easily |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
232 **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
|
233 equivalent to None: |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
234 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
|
235 XEP-0077 |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
236 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
|
237 account created in this case) |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
238 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
|
239 "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
|
240 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
|
241 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
|
242 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
|
243 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
|
244 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
|
245 profile) |
2184 | 246 None to automatically generate one |
247 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
|
248 will be set as profile identity if present |
2184 | 249 host_name(unicode, None): name of the host |
250 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
|
251 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
|
252 extra |
2184 | 253 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
|
254 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
|
255 invitation) |
2184 | 256 TODO: not used yet |
257 url_template(unicode, None): template to use to construct the invitation URL | |
258 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
|
259 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
|
260 in custom message) |
2184 | 261 /!\ 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
|
262 /!\ 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
|
263 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
|
264 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
|
265 email |
2184 | 266 None to use default subject |
267 uses the same substitution as for message_body | |
268 message_body(unicode, None): customised message body for the invitation email | |
269 None to use default body | |
270 use {name} as a place holder for invitee name | |
271 use {url} as a placeholder for the invitation url | |
272 use {uuid} as a placeholder for the identifier | |
273 use {app_name} as a placeholder for this software name | |
274 use {app_url} as a placeholder for this software official website | |
275 use {profile} as a placeholder for host's profile | |
276 use {host_name} as a placeholder for host's name | |
277 extra(dict, None): extra data to associate with the invitee | |
278 some keys are reserved: | |
279 - created (creation date) | |
280 if email argument is used, "email" key can't be used | |
281 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
|
282 @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
|
283 - UUID associated with the invitee (key: id) |
2184 | 284 - filled extra dictionary, as saved in the databae |
285 """ | |
286 ## initial checks | |
287 extra = kwargs.pop('extra', {}) | |
288 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
|
289 raise ValueError( |
3028 | 290 _("You can't use following key(s) in both args and extra: {}").format( |
291 ', '.join(set(kwargs).intersection(extra)))) | |
2184 | 292 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
293 self.check_extra(extra) |
2184 | 294 |
3028 | 295 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
|
296 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
297 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
|
298 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
|
299 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
|
300 extra.update(existing) |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
301 del extra[KEY_ID] |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
302 |
3028 | 303 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
|
304 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
|
305 raise ValueError( |
3028 | 306 _('You need to provide a main email address before using emails_extra')) |
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
|
307 |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
308 if (email is not None |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
309 and not 'url_template' in kwargs |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
310 and not 'message_body' in kwargs): |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
311 raise ValueError( |
3028 | 312 _("You need to provide url_template if you use default message body")) |
2210
f8d61592f1fc
plugin invitations: raise ValueError if url_template and message_body are both not specified
Goffi <goffi@goffi.org>
parents:
2208
diff
changeset
|
313 |
2184 | 314 ## uuid |
3028 | 315 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
|
316 id_ = existing[KEY_ID] if existing else str(shortuuid.uuid()) |
2184 | 317 |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
318 if existing is None: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
319 await self._create_account_and_profile(id_, kwargs, extra) |
2184 | 320 |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
321 profile = kwargs.pop('profile', None) |
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
322 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
|
323 jid_ = jid.JID(extra[KEY_JID]) |
2184 | 324 |
3700
cfc06915de15
plugin email invitations: re-use existing invitation for a given email:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
325 ## identity |
3028 | 326 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
|
327 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
|
328 if name is not None: |
3028 | 329 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
|
330 try: |
3028 | 331 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
|
332 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
|
333 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
|
334 else: |
3335
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
335 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
|
336 guest_client = self.host.get_client(guest_profile) |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
337 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
|
338 await self.host.disconnect(guest_profile) |
2184 | 339 |
340 ## email | |
3028 | 341 language = kwargs.pop('language', None) |
2184 | 342 if language is not None: |
3028 | 343 extra['language'] = language.strip() |
2184 | 344 |
345 if email is not None: | |
3028 | 346 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
|
347 data_format.iter2dict(KEY_EMAILS_EXTRA, extra) |
3028 | 348 url_template = kwargs.pop('url_template', '') |
2184 | 349 format_args = { |
3028 | 350 'uuid': id_, |
351 'app_name': C.APP_NAME, | |
352 'app_url': C.APP_URL} | |
2184 | 353 |
354 if name is None: | |
3028 | 355 format_args['name'] = email |
2184 | 356 else: |
3028 | 357 format_args['name'] = name |
2184 | 358 |
359 if profile is None: | |
3028 | 360 format_args['profile'] = '' |
2184 | 361 else: |
3028 | 362 format_args['profile'] = extra['profile'] = profile |
2184 | 363 |
3028 | 364 host_name = kwargs.pop('host_name', None) |
2184 | 365 if host_name is None: |
3028 | 366 format_args['host_name'] = profile or _("somebody") |
2184 | 367 else: |
3028 | 368 format_args['host_name'] = extra['host_name'] = host_name |
2184 | 369 |
370 invite_url = url_template.format(**format_args) | |
3028 | 371 format_args['url'] = invite_url |
2184 | 372 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
373 await sat_email.send_email( |
3040 | 374 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
|
375 [email] + emails_extra, |
3028 | 376 (kwargs.pop('message_subject', None) or DEFAULT_SUBJECT).format( |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
377 **format_args), |
3028 | 378 (kwargs.pop('message_body', None) or DEFAULT_BODY).format(**format_args), |
2184 | 379 ) |
380 | |
3336
e38ddaf477bd
plugin email invitation: guests are now automatically added to host roster in `guests` group
Goffi <goffi@goffi.org>
parents:
3335
diff
changeset
|
381 ## roster |
e38ddaf477bd
plugin email invitation: guests are now automatically added to host roster in `guests` group
Goffi <goffi@goffi.org>
parents:
3335
diff
changeset
|
382 |
e38ddaf477bd
plugin email invitation: guests are now automatically added to host roster in `guests` group
Goffi <goffi@goffi.org>
parents:
3335
diff
changeset
|
383 # 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
|
384 # 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
|
385 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
|
386 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
387 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
|
388 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
|
389 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
|
390 else: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
391 await self.host.contact_update(client, jid_, name, ['guests']) |
2184 | 392 |
393 if kwargs: | |
3028 | 394 log.warning(_("Not all arguments have been consumed: {}").format(kwargs)) |
2184 | 395 |
3335
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
396 ## extra data saving |
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
397 self.invitations[id_] = extra |
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
398 |
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
|
399 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
|
400 |
3335
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
401 return extra |
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
402 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
403 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
|
404 client = self.host.get_client(profile) |
3323
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
405 # 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
|
406 invitee_email = str(invitee_email) |
3335
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
407 invitee_name = str(invitee_name) |
3323
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
408 url_template = str(url_template) |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
409 extra = data_format.deserialise(extra_s) |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
410 d = defer.ensureDeferred( |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
411 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
|
412 ) |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
413 d.addCallback(lambda data: {k: str(v) for k,v in data.items()}) |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
414 return d |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
415 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
416 async def simple_create( |
3335
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
417 self, client, invitee_email, invitee_name, url_template, extra): |
3323
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
418 """Simplified method to invite somebody by email""" |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
419 return await self.create( |
3335
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
420 name=invitee_name, |
3323
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
421 email=invitee_email, |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
422 url_template=url_template, |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
423 profile=client.profile, |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
424 ) |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
425 |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
426 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
|
427 """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
|
428 |
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
|
429 @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
|
430 @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
|
431 @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
|
432 """ |
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
|
433 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
|
434 |
3337
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
435 def _delete(self, id_): |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
436 return defer.ensureDeferred(self.delete(id_)) |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
437 |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
438 async def delete(self, id_): |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
439 """Delete an invitation data and associated XMPP account""" |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
440 log.info(f"deleting invitation {id_}") |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
441 data = await self.get(id_) |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
442 guest_profile = data['guest_profile'] |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
443 password = data['password'] |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
444 try: |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
445 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
|
446 guest_client = self.host.get_client(guest_profile) |
3337
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
447 # 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
|
448 # delete the associated XMPP account |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
449 log.debug("deleting XMPP account") |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
450 await self.host.plugins['XEP-0077'].unregister(guest_client, None) |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
451 except (error.StanzaError, sasl.SASLAuthError) as e: |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
452 log.warning( |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
453 f"Can't delete {guest_profile}'s XMPP account, maybe it as already been " |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
454 f"deleted: {e}") |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
455 try: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
456 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
|
457 except Exception as e: |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
458 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
|
459 log.debug("removing guest data") |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
460 await self.invitations.adel(id_) |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
461 log.info(f"{id_} invitation has been deleted") |
932cf08dfdc3
plugin email invitation: new `invitationDelete` method
Goffi <goffi@goffi.org>
parents:
3336
diff
changeset
|
462 |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
463 def _modify(self, id_, new_extra, replace): |
3028 | 464 return self.modify(id_, {str(k): str(v) for k,v in new_extra.items()}, |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
465 replace) |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
466 |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
467 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
|
468 """Modify invitation data |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
469 |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
470 @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
|
471 @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
|
472 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
|
473 @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
|
474 else update them |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
475 @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
|
476 """ |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
477 self.check_extra(new_extra) |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
478 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
|
479 if replace: |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
480 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
|
481 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
|
482 try: |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
483 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
|
484 except KeyError: |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
485 continue |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
486 else: |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
487 new_data = current_data |
3028 | 488 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
|
489 if k in EXTRA_RESERVED: |
3323
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
490 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
|
491 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
|
492 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
|
493 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
|
494 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
|
495 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
|
496 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
|
497 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
|
498 pass |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
499 |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
500 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
|
501 |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
502 d = self.invitations[id_] |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3700
diff
changeset
|
503 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
|
504 return d |
2230
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
505 |
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
506 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
|
507 return defer.ensureDeferred(self.list(profile)) |
2230
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
508 |
3335
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
509 async def list(self, profile=C.PROF_KEY_NONE): |
2230
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
510 """List invitations |
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
511 |
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
512 @param profile(unicode): return invitation linked to this profile only |
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
513 C.PROF_KEY_NONE: don't filter invitations |
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
514 @return list(unicode): invitations uids |
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
515 """ |
3335
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
516 invitations = await self.invitations.all() |
2230
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
517 if profile != C.PROF_KEY_NONE: |
3028 | 518 invitations = {id_:data for id_, data in invitations.items() |
519 if data.get('profile') == profile} | |
2230
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
520 |
3335
83bc9d46a417
plugin email invitation: fixed create/simpleCreate + invitee_name:
Goffi <goffi@goffi.org>
parents:
3323
diff
changeset
|
521 return invitations |