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:
Goffi 2020-08-01 16:24:03 +02:00
commit 9ee767d0cb

View file

@ -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):