Mercurial > libervia-backend
annotate sat/plugins/plugin_misc_email_invitation.py @ 3323:44a9438d6608
plugin email invitation: simple invitation creation
The new `invitationSimpleCreate` is a simplified way to create an email invitation.
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 01 Aug 2020 16:19:50 +0200 |
parents | 1af840e84af7 |
children | 83bc9d46a417 |
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 |
3136 | 4 # Copyright (C) 2009-2020 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 |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
20 from twisted.internet import defer |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
21 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
|
22 from twisted.words.protocols.jabber import error |
2184 | 23 from sat.core.i18n import _, D_ |
24 from sat.core.constants import Const as C | |
25 from sat.core import exceptions | |
26 from sat.core.log import getLogger | |
27 from sat.tools import utils | |
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
|
28 from sat.tools.common import data_format |
2184 | 29 from sat.memory import persistent |
3007
420897488080
plugins account, email invitation: fixed import of "email" module after it has been moved
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
30 from sat.tools.common import email as sat_email |
2184 | 31 |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
32 log = getLogger(__name__) |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
33 |
2184 | 34 |
35 PLUGIN_INFO = { | |
36 C.PI_NAME: "Invitations", | |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2909
diff
changeset
|
37 C.PI_IMPORT_NAME: "EMAIL_INVITATION", |
2184 | 38 C.PI_TYPE: C.PLUG_TYPE_MISC, |
39 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
|
40 C.PI_RECOMMENDATIONS: ["IDENTITY"], |
2184 | 41 C.PI_MAIN: "InvitationsPlugin", |
42 C.PI_HANDLER: "no", | |
3028 | 43 C.PI_DESCRIPTION: _("""invitation of people without XMPP account""") |
2184 | 44 } |
45 | |
46 | |
47 SUFFIX_MAX = 5 | |
3028 | 48 INVITEE_PROFILE_TPL = "guest@@{uuid}" |
49 KEY_ID = 'id' | |
50 KEY_JID = 'jid' | |
51 KEY_CREATED = 'created' | |
52 KEY_LAST_CONNECTION = 'last_connection' | |
53 KEY_GUEST_PROFILE = 'guest_profile' | |
54 KEY_PASSWORD = 'password' | |
55 KEY_EMAILS_EXTRA = 'emails_extra' | |
56 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
|
57 KEY_GUEST_PROFILE, KEY_PASSWORD, KEY_EMAILS_EXTRA} |
3028 | 58 DEFAULT_SUBJECT = D_("You have been invited by {host_name} to {app_name}") |
59 DEFAULT_BODY = D_("""Hello {name}! | |
2184 | 60 |
61 You have received an invitation from {host_name} to participate to "{app_name}". | |
62 To join, you just have to click on the following URL: | |
63 {url} | |
64 | |
65 Please note that this URL should not be shared with anybody! | |
66 If you want more details on {app_name}, you can check {app_url}. | |
67 | |
68 Welcome! | |
69 """) | |
70 | |
71 | |
72 class InvitationsPlugin(object): | |
73 | |
74 def __init__(self, host): | |
3028 | 75 log.info(_("plugin Invitations initialization")) |
2184 | 76 self.host = host |
3028 | 77 self.invitations = persistent.LazyPersistentBinaryDict('invitations') |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
78 host.bridge.addMethod("invitationCreate", ".plugin", in_sign='sasssssssssa{ss}s', |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
79 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
|
80 method=self._create, |
3028 | 81 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
|
82 host.bridge.addMethod("invitationGet", ".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
|
83 method=self.get, |
3028 | 84 async_=True) |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
85 host.bridge.addMethod("invitationModify", ".plugin", in_sign='sa{ss}b', |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
86 out_sign='', |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
87 method=self._modify, |
3028 | 88 async_=True) |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
89 host.bridge.addMethod("invitationList", ".plugin", in_sign='s', |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
90 out_sign='a{sa{ss}}', |
2230
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
91 method=self._list, |
3028 | 92 async_=True) |
3323
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
93 host.bridge.addMethod("invitationSimpleCreate", ".plugin", in_sign='', |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
94 out_sign='a{ss}', |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
95 method=self._simpleCreate, |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
96 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
|
97 |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
98 def checkExtra(self, extra): |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
99 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
|
100 raise ValueError( |
3028 | 101 _("You can't use following key(s) in extra, they are reserved: {}") |
102 .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
|
103 |
3028 | 104 def _create(self, email='', emails_extra=None, jid_='', password='', name='', |
105 host_name='', language='', url_template='', message_subject='', | |
106 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
|
107 # 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
|
108 # 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
|
109 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
|
110 emails_extra = [] |
2184 | 111 |
112 if extra is None: | |
113 extra = {} | |
114 else: | |
3028 | 115 extra = {str(k): str(v) for k,v in extra.items()} |
2184 | 116 |
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
|
117 kwargs = {"extra": extra, |
3028 | 118 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
|
119 } |
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
|
120 |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
121 # 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
|
122 # with D-Bus |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
123 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
|
124 "url_template", "message_subject", "message_body", "profile"): |
2184 | 125 value = locals()[key] |
126 if value: | |
3028 | 127 kwargs[key] = str(value) |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
128 d = self.create(**kwargs) |
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
|
129 def serialize(data): |
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
|
130 data[KEY_JID] = data[KEY_JID].full() |
2230
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
131 return data |
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
|
132 d.addCallback(serialize) |
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
|
133 return d |
2184 | 134 |
135 @defer.inlineCallbacks | |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
136 def create(self, **kwargs): |
3028 | 137 r"""Create an invitation |
2184 | 138 |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
139 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
|
140 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
|
141 can be retrieved easily |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
142 **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
|
143 equivalent to None: |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
144 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
|
145 XEP-0077 |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
146 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
|
147 account created in this case) |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
148 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
|
149 "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
|
150 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
|
151 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
|
152 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
|
153 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
|
154 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
|
155 profile) |
2184 | 156 None to automatically generate one |
157 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
|
158 will be set as profile identity if present |
2184 | 159 host_name(unicode, None): name of the host |
160 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
|
161 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
|
162 extra |
2184 | 163 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
|
164 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
|
165 invitation) |
2184 | 166 TODO: not used yet |
167 url_template(unicode, None): template to use to construct the invitation URL | |
168 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
|
169 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
|
170 in custom message) |
2184 | 171 /!\ 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
|
172 /!\ 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
|
173 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
|
174 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
|
175 email |
2184 | 176 None to use default subject |
177 uses the same substitution as for message_body | |
178 message_body(unicode, None): customised message body for the invitation email | |
179 None to use default body | |
180 use {name} as a place holder for invitee name | |
181 use {url} as a placeholder for the invitation url | |
182 use {uuid} as a placeholder for the identifier | |
183 use {app_name} as a placeholder for this software name | |
184 use {app_url} as a placeholder for this software official website | |
185 use {profile} as a placeholder for host's profile | |
186 use {host_name} as a placeholder for host's name | |
187 extra(dict, None): extra data to associate with the invitee | |
188 some keys are reserved: | |
189 - created (creation date) | |
190 if email argument is used, "email" key can't be used | |
191 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
|
192 @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
|
193 - UUID associated with the invitee (key: id) |
2184 | 194 - filled extra dictionary, as saved in the databae |
195 """ | |
196 ## initial checks | |
197 extra = kwargs.pop('extra', {}) | |
198 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
|
199 raise ValueError( |
3028 | 200 _("You can't use following key(s) in both args and extra: {}").format( |
201 ', '.join(set(kwargs).intersection(extra)))) | |
2184 | 202 |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
203 self.checkExtra(extra) |
2184 | 204 |
3028 | 205 email = kwargs.pop('email', None) |
206 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
|
207 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
|
208 raise ValueError( |
3028 | 209 _('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
|
210 |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
211 if (email is not None |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
212 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
|
213 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
|
214 raise ValueError( |
3028 | 215 _("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
|
216 |
2184 | 217 ## uuid |
3028 | 218 log.info(_("creating an invitation")) |
219 id_ = str(shortuuid.uuid()) | |
2184 | 220 |
221 ## XMPP account creation | |
3028 | 222 password = kwargs.pop('password', None) |
2184 | 223 if password is None: |
224 password = utils.generatePassword() | |
225 assert password | |
226 # XXX: password is here saved in clear in database | |
227 # it is needed for invitation as the same password is used for profile | |
228 # and SàT need to be able to automatically open the profile with the uuid | |
229 # FIXME: we could add an extra encryption key which would be used with the uuid | |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
230 # when the invitee is connecting (e.g. with URL). This key would not be |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
231 # saved and could be used to encrypt profile password. |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
232 extra[KEY_PASSWORD] = password |
2184 | 233 |
3028 | 234 jid_ = kwargs.pop('jid_', None) |
2184 | 235 if not jid_: |
236 domain = self.host.memory.getConfig(None, 'xmpp_domain') | |
237 if not domain: | |
238 # TODO: fallback to profile's domain | |
3028 | 239 raise ValueError(_("You need to specify xmpp_domain in sat.conf")) |
240 jid_ = "invitation-{uuid}@{domain}".format(uuid=shortuuid.uuid(), | |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
241 domain=domain) |
2184 | 242 jid_ = jid.JID(jid_) |
243 if jid_.user: | |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
244 # we don't register account if there is no user as anonymous login is then |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
245 # used |
2184 | 246 try: |
247 yield self.host.plugins['XEP-0077'].registerNewAccount(jid_, password) | |
248 except error.StanzaError as e: | |
249 prefix = jid_.user | |
250 idx = 0 | |
3028 | 251 while e.condition == 'conflict': |
2184 | 252 if idx >= SUFFIX_MAX: |
3028 | 253 raise exceptions.ConflictError(_("Can't create XMPP account")) |
254 jid_.user = prefix + '_' + str(idx) | |
255 log.info(_("requested jid already exists, trying with {}".format( | |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
256 jid_.full()))) |
2184 | 257 try: |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
258 yield self.host.plugins['XEP-0077'].registerNewAccount(jid_, |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
259 password) |
3040 | 260 except error.StanzaError: |
2184 | 261 idx += 1 |
262 else: | |
263 break | |
3028 | 264 if e.condition != 'conflict': |
2184 | 265 raise e |
266 | |
3028 | 267 log.info(_("account {jid_} created").format(jid_=jid_.full())) |
2184 | 268 |
269 ## profile creation | |
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
|
270 |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
271 extra[KEY_GUEST_PROFILE] = guest_profile = INVITEE_PROFILE_TPL.format(uuid=id_) |
2184 | 272 # profile creation should not fail as we generate unique name ourselves |
273 yield self.host.memory.createProfile(guest_profile, password) | |
274 yield self.host.memory.startSession(password, guest_profile) | |
2909
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
275 yield self.host.memory.setParam("JabberID", jid_.full(), "Connection", |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
276 profile_key=guest_profile) |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
277 yield self.host.memory.setParam("Password", password, "Connection", |
90146552cde5
core (memory), plugin XEP-0329, plugin invitation: minor style improvments
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
278 profile_key=guest_profile) |
3028 | 279 name = kwargs.pop('name', None) |
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
|
280 if name is not None: |
3028 | 281 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
|
282 try: |
3028 | 283 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
|
284 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
|
285 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
|
286 else: |
3120 | 287 yield defer.ensureDeferred(self.host.connect(guest_profile, 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
|
288 guest_client = self.host.getClient(guest_profile) |
3028 | 289 yield id_plugin.setIdentity(guest_client, {'nick': 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
|
290 yield self.host.disconnect(guest_profile) |
2184 | 291 |
292 ## email | |
3028 | 293 language = kwargs.pop('language', None) |
2184 | 294 if language is not None: |
3028 | 295 extra['language'] = language.strip() |
2184 | 296 |
297 if email is not None: | |
3028 | 298 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
|
299 data_format.iter2dict(KEY_EMAILS_EXTRA, extra) |
3028 | 300 url_template = kwargs.pop('url_template', '') |
2184 | 301 format_args = { |
3028 | 302 'uuid': id_, |
303 'app_name': C.APP_NAME, | |
304 'app_url': C.APP_URL} | |
2184 | 305 |
306 if name is None: | |
3028 | 307 format_args['name'] = email |
2184 | 308 else: |
3028 | 309 format_args['name'] = name |
2184 | 310 |
3028 | 311 profile = kwargs.pop('profile', None) |
2184 | 312 if profile is None: |
3028 | 313 format_args['profile'] = '' |
2184 | 314 else: |
3028 | 315 format_args['profile'] = extra['profile'] = profile |
2184 | 316 |
3028 | 317 host_name = kwargs.pop('host_name', None) |
2184 | 318 if host_name is None: |
3028 | 319 format_args['host_name'] = profile or _("somebody") |
2184 | 320 else: |
3028 | 321 format_args['host_name'] = extra['host_name'] = host_name |
2184 | 322 |
323 invite_url = url_template.format(**format_args) | |
3028 | 324 format_args['url'] = invite_url |
2184 | 325 |
326 yield sat_email.sendEmail( | |
3040 | 327 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
|
328 [email] + emails_extra, |
3028 | 329 (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
|
330 **format_args), |
3028 | 331 (kwargs.pop('message_body', None) or DEFAULT_BODY).format(**format_args), |
2184 | 332 ) |
333 | |
334 ## extra data saving | |
335 self.invitations[id_] = extra | |
336 | |
337 if kwargs: | |
3028 | 338 log.warning(_("Not all arguments have been consumed: {}").format(kwargs)) |
2184 | 339 |
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
|
340 extra[KEY_ID] = id_ |
2230
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
341 extra[KEY_JID] = jid_ |
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
|
342 defer.returnValue(extra) |
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
|
343 |
3323
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
344 def _simpleCreate(self, invitee_email, url_template, extra_s, profile): |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
345 client = self.host.getClient(profile) |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
346 # 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
|
347 invitee_email = str(invitee_email) |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
348 url_template = str(url_template) |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
349 extra = data_format.deserialise(extra_s) |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
350 d = defer.ensureDeferred( |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
351 self.simpleCreate(client, invitee_email, url_template, extra) |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
352 ) |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
353 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
|
354 return d |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
355 |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
356 async def simpleCreate(self, client, invitee_email, url_template, extra): |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
357 """Simplified method to invite somebody by email""" |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
358 return await self.create( |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
359 email=invitee_email, |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
360 url_template=url_template, |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
361 profile=client.profile, |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
362 ) |
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
363 |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
364 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
|
365 """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
|
366 |
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
|
367 @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
|
368 @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
|
369 @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
|
370 """ |
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
|
371 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
|
372 |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
373 def _modify(self, id_, new_extra, replace): |
3028 | 374 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
|
375 replace) |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
376 |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
377 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
|
378 """Modify invitation data |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
379 |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
380 @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
|
381 @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
|
382 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
|
383 @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
|
384 else update them |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
385 @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
|
386 """ |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
387 self.checkExtra(new_extra) |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
388 def gotCurrentData(current_data): |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
389 if replace: |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
390 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
|
391 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
|
392 try: |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
393 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
|
394 except KeyError: |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
395 continue |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
396 else: |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
397 new_data = current_data |
3028 | 398 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
|
399 if k in EXTRA_RESERVED: |
3323
44a9438d6608
plugin email invitation: simple invitation creation
Goffi <goffi@goffi.org>
parents:
3253
diff
changeset
|
400 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
|
401 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
|
402 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
|
403 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
|
404 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
|
405 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
|
406 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
|
407 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
|
408 pass |
2219
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
409 |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
410 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
|
411 |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
412 d = self.invitations[id_] |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
413 d.addCallback(gotCurrentData) |
77a3d0a28642
plugin invitations: added modify method (+ bridge) and fixed email setting in extra
Goffi <goffi@goffi.org>
parents:
2212
diff
changeset
|
414 return d |
2230
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
415 |
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
416 def _list(self, profile=C.PROF_KEY_NONE): |
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
417 return self.list(profile) |
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
418 |
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
419 @defer.inlineCallbacks |
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
420 def list(self, profile=C.PROF_KEY_NONE): |
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
421 """List invitations |
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
422 |
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
423 @param profile(unicode): return invitation linked to this profile only |
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
424 C.PROF_KEY_NONE: don't filter invitations |
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
425 @return list(unicode): invitations uids |
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
426 """ |
3253
1af840e84af7
core (memory/persistent): fixed "items", added "all" + "adel" to LazyPersistentBinaryDict:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
427 invitations = yield self.invitations.all() |
2230
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
428 if profile != C.PROF_KEY_NONE: |
3028 | 429 invitations = {id_:data for id_, data in invitations.items() |
430 if data.get('profile') == profile} | |
2230
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
431 |
ebc0c1701811
plugin invitations: added invitationList command
Goffi <goffi@goffi.org>
parents:
2223
diff
changeset
|
432 defer.returnValue(invitations) |