Mercurial > libervia-backend
diff sat/plugins/plugin_exp_invitation.py @ 3324:b57b5e42e894
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.
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 01 Aug 2020 16:24:03 +0200 |
parents | 559a625a236b |
children | cc6164a4973b |
line wrap: on
line diff
--- a/sat/plugins/plugin_exp_invitation.py Sat Aug 01 16:19:50 2020 +0200 +++ b/sat/plugins/plugin_exp_invitation.py Sat Aug 01 16:24:03 2020 +0200 @@ -35,8 +35,8 @@ 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 @@ 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 @@ """ 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 @@ 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):