annotate libervia/backend/plugins/plugin_exp_invitation_file.py @ 4219:1b5cf2ee1d86

plugin XEP-0384, XEP-0391: download missing devices list: when a peer jid was not in our roster, devices list was not retrieved, resulting in failed en/decryption. This patch does check it and download missing devices list in necessary. There is no subscription managed yet, so the list won't be updated in case of new devices, this should be addressed at some point.
author Goffi <goffi@goffi.org>
date Tue, 05 Mar 2024 17:31:36 +0100
parents 4b842c1fb686
children 0d7bb4df2343
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2931
diff changeset
1 #!/usr/bin/env python3
3137
559a625a236b fixed shebangs
Goffi <goffi@goffi.org>
parents: 3136
diff changeset
2
3324
b57b5e42e894 plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents: 3314
diff changeset
3 # SàT plugin to send invitations for file sharing
3479
be6d91572633 date update
Goffi <goffi@goffi.org>
parents: 3462
diff changeset
4 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org)
2917
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
5
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
6 # This program is free software: you can redistribute it and/or modify
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
7 # it under the terms of the GNU Affero General Public License as published by
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
8 # the Free Software Foundation, either version 3 of the License, or
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
9 # (at your option) any later version.
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
10
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
11 # This program is distributed in the hope that it will be useful,
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
14 # GNU Affero General Public License for more details.
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
15
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
16 # You should have received a copy of the GNU Affero General Public License
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
18
4071
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
19 from libervia.backend.core.i18n import _
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
20 from libervia.backend.core.constants import Const as C
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
21 from libervia.backend.core.log import getLogger
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
22 from libervia.backend.core.xmpp import SatXMPPEntity
4b842c1fb686 refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents: 4037
diff changeset
23 from libervia.backend.tools.common import data_format
3299
83795ff8a633 plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
24 from twisted.internet import defer
2917
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
25 from twisted.words.protocols.jabber import jid
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
26
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
27 log = getLogger(__name__)
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
28
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
29
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
30 PLUGIN_INFO = {
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
31 C.PI_NAME: "File Sharing Invitation",
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
32 C.PI_IMPORT_NAME: "FILE_SHARING_INVITATION",
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
33 C.PI_TYPE: "EXP",
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
34 C.PI_PROTOCOLS: [],
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2931
diff changeset
35 C.PI_DEPENDENCIES: ["XEP-0329", "INVITATION"],
2917
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
36 C.PI_RECOMMENDATIONS: [],
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
37 C.PI_MAIN: "FileSharingInvitation",
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
38 C.PI_HANDLER: "no",
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2931
diff changeset
39 C.PI_DESCRIPTION: _("Experimental handling of invitations for file sharing"),
2917
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
40 }
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
41
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
42
3324
b57b5e42e894 plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents: 3314
diff changeset
43 class FileSharingInvitation:
2917
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
44
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
45 def __init__(self, host):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2931
diff changeset
46 log.info(_("File Sharing Invitation plugin initialization"))
2917
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
47 self.host = host
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
48 ns_fis = host.get_namespace("fis")
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
49 host.plugins["INVITATION"].register_namespace(ns_fis, self.on_invitation)
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
50 host.bridge.add_method(
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
51 "fis_invite",
2917
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
52 ".plugin",
2931
b256e90612d0 plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents: 2917
diff changeset
53 in_sign="ssssssss",
2917
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
54 out_sign="",
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
55 method=self._send_file_sharing_invitation,
3324
b57b5e42e894 plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents: 3314
diff changeset
56 async_=True
2917
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
57 )
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
58
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
59 def _send_file_sharing_invitation(
2917
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
60 self, invitee_jid_s, service_s, repos_type=None, namespace=None, path=None,
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2931
diff changeset
61 name=None, extra_s='', profile_key=C.PROF_KEY_NONE):
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
62 client = self.host.get_client(profile_key)
2917
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
63 invitee_jid = jid.JID(invitee_jid_s)
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
64 service = jid.JID(service_s)
2931
b256e90612d0 plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents: 2917
diff changeset
65 extra = data_format.deserialise(extra_s)
3324
b57b5e42e894 plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents: 3314
diff changeset
66 return defer.ensureDeferred(
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
67 self.host.plugins["INVITATION"].send_file_sharing_invitation(
3324
b57b5e42e894 plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents: 3314
diff changeset
68 client, invitee_jid, service, repos_type=repos_type or None,
b57b5e42e894 plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents: 3314
diff changeset
69 namespace=namespace or None, path=path or None, name=name or None,
b57b5e42e894 plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents: 3314
diff changeset
70 extra=extra)
b57b5e42e894 plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents: 3314
diff changeset
71 )
2917
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
72
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
73 def on_invitation(
3462
12dc234f698c plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents: 3324
diff changeset
74 self,
12dc234f698c plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents: 3324
diff changeset
75 client: SatXMPPEntity,
12dc234f698c plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents: 3324
diff changeset
76 namespace: str,
12dc234f698c plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents: 3324
diff changeset
77 name: str,
12dc234f698c plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents: 3324
diff changeset
78 extra: dict,
12dc234f698c plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents: 3324
diff changeset
79 service: jid.JID,
12dc234f698c plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents: 3324
diff changeset
80 repos_type: str,
12dc234f698c plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents: 3324
diff changeset
81 sharing_ns: str,
12dc234f698c plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents: 3324
diff changeset
82 path: str
12dc234f698c plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents: 3324
diff changeset
83 ):
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2931
diff changeset
84 if repos_type == "files":
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2931
diff changeset
85 type_human = _("file sharing")
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2931
diff changeset
86 elif repos_type == "photos":
3299
83795ff8a633 plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
87 type_human = _("photo album")
2917
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
88 else:
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2931
diff changeset
89 log.warning("Unknown repository type: {repos_type}".format(
2917
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
90 repos_type=repos_type))
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2931
diff changeset
91 repos_type = "file"
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2931
diff changeset
92 type_human = _("file sharing")
2917
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
93 log.info(_(
3028
ab2696e34d29 Python 3 port:
Goffi <goffi@goffi.org>
parents: 2931
diff changeset
94 '{profile} has received an invitation for a files repository ({type_human}) '
3462
12dc234f698c plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents: 3324
diff changeset
95 'with namespace {sharing_ns!r} at path [{path}]').format(
12dc234f698c plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents: 3324
diff changeset
96 profile=client.profile, type_human=type_human, sharing_ns=sharing_ns,
12dc234f698c plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents: 3324
diff changeset
97 path=path)
2917
adf6e33a3e50 plugin invitation file: wrong plugin had been uploaded:
Goffi <goffi@goffi.org>
parents:
diff changeset
98 )
3299
83795ff8a633 plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
99 return defer.ensureDeferred(
4037
524856bd7b19 massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents: 3479
diff changeset
100 self.host.plugins['LIST_INTEREST'].register_file_sharing(
3462
12dc234f698c plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents: 3324
diff changeset
101 client, service, repos_type, sharing_ns, path, name, extra
3299
83795ff8a633 plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
102 )
83795ff8a633 plugin list of interest: expose `interestsRegisterFileSharing` to bridge + use coroutines
Goffi <goffi@goffi.org>
parents: 3137
diff changeset
103 )