plugin email invitation: fixed create/simpleCreate + invitee_name:
- fixed invitationSimpleCreate signature - fixed nicknames settings in create - use async coroutines - guest jid is now stored (as a string), avoiding the need to check profile to retrieve it - invitee_name is now needed in invitationSimpleCreate
This commit is contained in:
parent
e54d37fbc3
commit
a8cb6e5a70
1 changed files with 31 additions and 32 deletions
|
|
@ -33,7 +33,7 @@ log = getLogger(__name__)
|
|||
|
||||
|
||||
PLUGIN_INFO = {
|
||||
C.PI_NAME: "Invitations",
|
||||
C.PI_NAME: "Email Invitations",
|
||||
C.PI_IMPORT_NAME: "EMAIL_INVITATION",
|
||||
C.PI_TYPE: C.PLUG_TYPE_MISC,
|
||||
C.PI_DEPENDENCIES: ['XEP-0077'],
|
||||
|
|
@ -90,7 +90,7 @@ class InvitationsPlugin(object):
|
|||
out_sign='a{sa{ss}}',
|
||||
method=self._list,
|
||||
async_=True)
|
||||
host.bridge.addMethod("invitationSimpleCreate", ".plugin", in_sign='',
|
||||
host.bridge.addMethod("invitationSimpleCreate", ".plugin", in_sign='sssss',
|
||||
out_sign='a{ss}',
|
||||
method=self._simpleCreate,
|
||||
async_=True)
|
||||
|
|
@ -125,15 +125,9 @@ class InvitationsPlugin(object):
|
|||
value = locals()[key]
|
||||
if value:
|
||||
kwargs[key] = str(value)
|
||||
d = self.create(**kwargs)
|
||||
def serialize(data):
|
||||
data[KEY_JID] = data[KEY_JID].full()
|
||||
return data
|
||||
d.addCallback(serialize)
|
||||
return d
|
||||
return defer.ensureDeferred(self.create(**kwargs))
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def create(self, **kwargs):
|
||||
async def create(self, **kwargs):
|
||||
r"""Create an invitation
|
||||
|
||||
This will create an XMPP account and a profile, and use a UUID to retrieve them.
|
||||
|
|
@ -244,7 +238,7 @@ class InvitationsPlugin(object):
|
|||
# we don't register account if there is no user as anonymous login is then
|
||||
# used
|
||||
try:
|
||||
yield self.host.plugins['XEP-0077'].registerNewAccount(jid_, password)
|
||||
await self.host.plugins['XEP-0077'].registerNewAccount(jid_, password)
|
||||
except error.StanzaError as e:
|
||||
prefix = jid_.user
|
||||
idx = 0
|
||||
|
|
@ -255,7 +249,7 @@ class InvitationsPlugin(object):
|
|||
log.info(_("requested jid already exists, trying with {}".format(
|
||||
jid_.full())))
|
||||
try:
|
||||
yield self.host.plugins['XEP-0077'].registerNewAccount(jid_,
|
||||
await self.host.plugins['XEP-0077'].registerNewAccount(jid_,
|
||||
password)
|
||||
except error.StanzaError:
|
||||
idx += 1
|
||||
|
|
@ -270,11 +264,11 @@ class InvitationsPlugin(object):
|
|||
|
||||
extra[KEY_GUEST_PROFILE] = guest_profile = INVITEE_PROFILE_TPL.format(uuid=id_)
|
||||
# profile creation should not fail as we generate unique name ourselves
|
||||
yield self.host.memory.createProfile(guest_profile, password)
|
||||
yield self.host.memory.startSession(password, guest_profile)
|
||||
yield self.host.memory.setParam("JabberID", jid_.full(), "Connection",
|
||||
await self.host.memory.createProfile(guest_profile, password)
|
||||
await self.host.memory.startSession(password, guest_profile)
|
||||
await self.host.memory.setParam("JabberID", jid_.full(), "Connection",
|
||||
profile_key=guest_profile)
|
||||
yield self.host.memory.setParam("Password", password, "Connection",
|
||||
await self.host.memory.setParam("Password", password, "Connection",
|
||||
profile_key=guest_profile)
|
||||
name = kwargs.pop('name', None)
|
||||
if name is not None:
|
||||
|
|
@ -284,10 +278,10 @@ class InvitationsPlugin(object):
|
|||
except KeyError:
|
||||
pass
|
||||
else:
|
||||
yield defer.ensureDeferred(self.host.connect(guest_profile, password))
|
||||
await self.host.connect(guest_profile, password)
|
||||
guest_client = self.host.getClient(guest_profile)
|
||||
yield id_plugin.setIdentity(guest_client, {'nick': name})
|
||||
yield self.host.disconnect(guest_profile)
|
||||
await id_plugin.setIdentity(guest_client, {'nicknames': [name]})
|
||||
await self.host.disconnect(guest_profile)
|
||||
|
||||
## email
|
||||
language = kwargs.pop('language', None)
|
||||
|
|
@ -323,7 +317,7 @@ class InvitationsPlugin(object):
|
|||
invite_url = url_template.format(**format_args)
|
||||
format_args['url'] = invite_url
|
||||
|
||||
yield sat_email.sendEmail(
|
||||
await sat_email.sendEmail(
|
||||
self.host.memory.config,
|
||||
[email] + emails_extra,
|
||||
(kwargs.pop('message_subject', None) or DEFAULT_SUBJECT).format(
|
||||
|
|
@ -331,31 +325,37 @@ class InvitationsPlugin(object):
|
|||
(kwargs.pop('message_body', None) or DEFAULT_BODY).format(**format_args),
|
||||
)
|
||||
|
||||
## extra data saving
|
||||
self.invitations[id_] = extra
|
||||
|
||||
if kwargs:
|
||||
log.warning(_("Not all arguments have been consumed: {}").format(kwargs))
|
||||
|
||||
extra[KEY_ID] = id_
|
||||
extra[KEY_JID] = jid_
|
||||
defer.returnValue(extra)
|
||||
extra[KEY_JID] = jid_.full()
|
||||
|
||||
def _simpleCreate(self, invitee_email, url_template, extra_s, profile):
|
||||
## extra data saving
|
||||
self.invitations[id_] = extra
|
||||
|
||||
extra[KEY_ID] = id_
|
||||
|
||||
return extra
|
||||
|
||||
def _simpleCreate(self, invitee_email, invitee_name, url_template, extra_s, profile):
|
||||
client = self.host.getClient(profile)
|
||||
# FIXME: needed because python-dbus use a specific string class
|
||||
invitee_email = str(invitee_email)
|
||||
invitee_name = str(invitee_name)
|
||||
url_template = str(url_template)
|
||||
extra = data_format.deserialise(extra_s)
|
||||
d = defer.ensureDeferred(
|
||||
self.simpleCreate(client, invitee_email, url_template, extra)
|
||||
self.simpleCreate(client, invitee_email, invitee_name, url_template, extra)
|
||||
)
|
||||
d.addCallback(lambda data: {k: str(v) for k,v in data.items()})
|
||||
return d
|
||||
|
||||
async def simpleCreate(self, client, invitee_email, url_template, extra):
|
||||
async def simpleCreate(
|
||||
self, client, invitee_email, invitee_name, url_template, extra):
|
||||
"""Simplified method to invite somebody by email"""
|
||||
return await self.create(
|
||||
name=invitee_name,
|
||||
email=invitee_email,
|
||||
url_template=url_template,
|
||||
profile=client.profile,
|
||||
|
|
@ -414,19 +414,18 @@ class InvitationsPlugin(object):
|
|||
return d
|
||||
|
||||
def _list(self, profile=C.PROF_KEY_NONE):
|
||||
return self.list(profile)
|
||||
return defer.ensureDeferred(self.list(profile))
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def list(self, profile=C.PROF_KEY_NONE):
|
||||
async def list(self, profile=C.PROF_KEY_NONE):
|
||||
"""List invitations
|
||||
|
||||
@param profile(unicode): return invitation linked to this profile only
|
||||
C.PROF_KEY_NONE: don't filter invitations
|
||||
@return list(unicode): invitations uids
|
||||
"""
|
||||
invitations = yield self.invitations.all()
|
||||
invitations = await self.invitations.all()
|
||||
if profile != C.PROF_KEY_NONE:
|
||||
invitations = {id_:data for id_, data in invitations.items()
|
||||
if data.get('profile') == profile}
|
||||
|
||||
defer.returnValue(invitations)
|
||||
return invitations
|
||||
|
|
|
|||
Loading…
Reference in a new issue