Mercurial > libervia-backend
annotate sat/plugins/plugin_misc_email_invitation.py @ 3330:7b47f48d31f3
plugin XEP-0264: fix orientation of thumbnails:
Rotation of thumbnailis is now modified according to EXIF orientation data. Original image
is not modified as user may want to keep it, and orientation transformation can modify
encoding parameters.
Update `pillow` minimum version to the first one with `exif_transpose` implementation.
author | Goffi <goffi@goffi.org> |
---|---|
date | Thu, 13 Aug 2020 23:46:18 +0200 |
parents | 44a9438d6608 |
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) |