plugins invitation, invitation-file: adapt service JID and affiliation:
if the user part of the service is missing while creating and invitation, it's added because using only the domain will lead to a different repository depending on the requester. In addition, the invitee is added to the repostiroy path as a member, to be sure he/she can access it.
This commit is contained in:
parent
3f739a8ac8
commit
9ee767d0cb
2 changed files with 32 additions and 12 deletions
|
|
@ -35,8 +35,8 @@ PLUGIN_INFO = {
|
|||
C.PI_IMPORT_NAME: "INVITATION",
|
||||
C.PI_TYPE: "EXP",
|
||||
C.PI_PROTOCOLS: [],
|
||||
C.PI_DEPENDENCIES: ["XEP-0060", "XEP-0329"],
|
||||
C.PI_RECOMMENDATIONS: [],
|
||||
C.PI_DEPENDENCIES: ["XEP-0060", "XEP-0106", "XEP-0329"],
|
||||
C.PI_RECOMMENDATIONS: ["EMAIL_INVITATION"],
|
||||
C.PI_MAIN: "Invitation",
|
||||
C.PI_HANDLER: "yes",
|
||||
C.PI_DESCRIPTION: _("Experimental handling of invitations"),
|
||||
|
|
@ -145,8 +145,10 @@ class Invitation(object):
|
|||
pubsub_elt["item"] = item_id
|
||||
return client.send(mess_data["xml"])
|
||||
|
||||
def sendFileSharingInvitation(self, client, invitee_jid, service, repos_type=None,
|
||||
namespace=None, path=None, name=None, extra=None):
|
||||
async def sendFileSharingInvitation(
|
||||
self, client, invitee_jid, service, repos_type=None, namespace=None, path=None,
|
||||
name=None, extra=None
|
||||
):
|
||||
"""Send a file sharing invitation in a <message> stanza
|
||||
|
||||
@param invitee_jid(jid.JID): entitee to send invitation to
|
||||
|
|
@ -161,6 +163,22 @@ class Invitation(object):
|
|||
"""
|
||||
if extra is None:
|
||||
extra = {}
|
||||
# FIXME: Q&D fix as the bare file sharing service JID will lead to user own
|
||||
# repository, which thus would not be the same for the host and the guest.
|
||||
# By specifying the user part, we for the use of the host repository.
|
||||
# A cleaner way should be implemented
|
||||
if service.user is None:
|
||||
service.user = self.host.plugins['XEP-0106'].escape(client.jid.user)
|
||||
|
||||
# FIXME: not the best place to adapt permission, but it's necessary to check them
|
||||
# for UX
|
||||
try:
|
||||
await self.host.plugins['XEP-0329'].affiliationsSet(
|
||||
client, service, namespace, path, {invitee_jid: "member"}
|
||||
)
|
||||
except Exception as e:
|
||||
log.warning(f"Can't set affiliation: {e}")
|
||||
|
||||
mess_data, invitation_elt = self._generateBaseInvitation(
|
||||
client, invitee_jid, name, extra)
|
||||
file_sharing_elt = invitation_elt.addElement("file_sharing")
|
||||
|
|
@ -176,7 +194,7 @@ class Invitation(object):
|
|||
file_sharing_elt["namespace"] = namespace
|
||||
if path is not None:
|
||||
file_sharing_elt["path"] = path
|
||||
return client.send(mess_data["xml"])
|
||||
client.send(mess_data["xml"])
|
||||
|
||||
@defer.inlineCallbacks
|
||||
def _parsePubsubElt(self, client, pubsub_elt):
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
|
||||
# SAT plugin to detect language (experimental)
|
||||
# SàT plugin to send invitations for file sharing
|
||||
# Copyright (C) 2009-2020 Jérôme Poisson (goffi@goffi.org)
|
||||
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
|
|
@ -40,7 +39,7 @@ PLUGIN_INFO = {
|
|||
}
|
||||
|
||||
|
||||
class FileSharingInvitation(object):
|
||||
class FileSharingInvitation:
|
||||
|
||||
def __init__(self, host):
|
||||
log.info(_("File Sharing Invitation plugin initialization"))
|
||||
|
|
@ -53,6 +52,7 @@ class FileSharingInvitation(object):
|
|||
in_sign="ssssssss",
|
||||
out_sign="",
|
||||
method=self._sendFileSharingInvitation,
|
||||
async_=True
|
||||
)
|
||||
|
||||
def _sendFileSharingInvitation(
|
||||
|
|
@ -62,10 +62,12 @@ class FileSharingInvitation(object):
|
|||
invitee_jid = jid.JID(invitee_jid_s)
|
||||
service = jid.JID(service_s)
|
||||
extra = data_format.deserialise(extra_s)
|
||||
return self.host.plugins["INVITATION"].sendFileSharingInvitation(
|
||||
client, invitee_jid, service, repos_type=repos_type or None,
|
||||
namespace=namespace or None, path=path or None, name=name or None,
|
||||
extra=extra)
|
||||
return defer.ensureDeferred(
|
||||
self.host.plugins["INVITATION"].sendFileSharingInvitation(
|
||||
client, invitee_jid, service, repos_type=repos_type or None,
|
||||
namespace=namespace or None, path=path or None, name=name or None,
|
||||
extra=extra)
|
||||
)
|
||||
|
||||
def onInvitation(self, client, name, extra, service, repos_type, namespace, path):
|
||||
if repos_type == "files":
|
||||
|
|
|
|||
Loading…
Reference in a new issue