Mercurial > libervia-backend
annotate sat/plugins/plugin_exp_invitation.py @ 3728:b15644cae50d
component AP gateway: JID/node ⟺ AP outbox conversion:
- convert a combination of JID and optional pubsub node to AP actor handle (see
`getJIDAndNode` for details) and vice versa
- the gateway now provides a Pubsub service
- retrieve pubsub node and convert it to AP collection, AP pagination is converted to RSM
- do the opposite: convert AP collection to pubsub and handle RSM request. Due to
ActivityStream collection pagination limitations, some RSM request produce inefficient
requests, but caching should be used most of the time in the future and avoid the
problem.
- set specific name to HTTP Server
- new `local_only` setting (`True` by default) to indicate if the gateway can request or
not XMPP Pubsub nodes from other servers
- disco info now specifies important features such as Pubsub RSM, and nodes metadata
ticket 363
author | Goffi <goffi@goffi.org> |
---|---|
date | Tue, 25 Jan 2022 17:54:06 +0100 |
parents | be6d91572633 |
children | e2a1ac1afb38 |
rev | line source |
---|---|
3028 | 1 #!/usr/bin/env python3 |
3137 | 2 |
3359
000b6722bd35
plugin XEP-0329: added `FISCreateDir` method:
Goffi <goffi@goffi.org>
parents:
3351
diff
changeset
|
3 # SàT plugin to manage invitations |
3479 | 4 # Copyright (C) 2009-2021 Jérôme Poisson (goffi@goffi.org) |
2231 | 5 |
6 # This program is free software: you can redistribute it and/or modify | |
7 # it under the terms of the GNU Affero General Public License as published by | |
8 # the Free Software Foundation, either version 3 of the License, or | |
9 # (at your option) any later version. | |
10 | |
11 # This program is distributed in the hope that it will be useful, | |
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 # GNU Affero General Public License for more details. | |
15 | |
16 # You should have received a copy of the GNU Affero General Public License | |
17 # along with this program. If not, see <http://www.gnu.org/licenses/>. | |
18 | |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
19 from typing import Optional |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
20 from zope.interface import implementer |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
21 from twisted.internet import defer |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
22 from twisted.words.protocols.jabber import jid |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
23 from twisted.words.protocols.jabber.xmlstream import XMPPHandler |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
24 from wokkel import disco, iwokkel |
2231 | 25 from sat.core.i18n import _ |
2243
5e12fc5ae52a
plugin events: separation of event node and invitees node
Goffi <goffi@goffi.org>
parents:
2231
diff
changeset
|
26 from sat.core import exceptions |
2231 | 27 from sat.core.constants import Const as C |
28 from sat.core.log import getLogger | |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
29 from sat.core.xmpp import SatXMPPEntity |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
30 from sat.tools import utils |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
31 |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
32 log = getLogger(__name__) |
2231 | 33 |
34 | |
35 PLUGIN_INFO = { | |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
36 C.PI_NAME: "Invitation", |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
37 C.PI_IMPORT_NAME: "INVITATION", |
2231 | 38 C.PI_TYPE: "EXP", |
39 C.PI_PROTOCOLS: [], | |
3350
cc6164a4973b
plugin list of interests: normalize item ID + added `get` method
Goffi <goffi@goffi.org>
parents:
3324
diff
changeset
|
40 C.PI_DEPENDENCIES: ["XEP-0060", "XEP-0329", "LIST_INTEREST"], |
3324
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
41 C.PI_RECOMMENDATIONS: ["EMAIL_INVITATION"], |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
42 C.PI_MAIN: "Invitation", |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
43 C.PI_HANDLER: "yes", |
3028 | 44 C.PI_DESCRIPTION: _("Experimental handling of invitations"), |
2231 | 45 } |
46 | |
3028 | 47 NS_INVITATION = "https://salut-a-toi/protocol/invitation:0" |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
48 INVITATION = '/message/invitation[@xmlns="{ns_invit}"]'.format( |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
49 ns_invit=NS_INVITATION |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
50 ) |
3028 | 51 NS_INVITATION_LIST = NS_INVITATION + "#list" |
2231 | 52 |
53 | |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
54 class Invitation(object): |
2231 | 55 |
56 def __init__(self, host): | |
3028 | 57 log.info(_("Invitation plugin initialization")) |
2231 | 58 self.host = host |
59 self._p = self.host.plugins["XEP-0060"] | |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
60 # map from namespace of the invitation to callback handling it |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
61 self._ns_cb = {} |
2231 | 62 |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
63 def getHandler(self, client): |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
64 return PubsubInvitationHandler(self) |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
65 |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
66 def registerNamespace(self, namespace, callback): |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
67 """Register a callback for a namespace |
2243
5e12fc5ae52a
plugin events: separation of event node and invitees node
Goffi <goffi@goffi.org>
parents:
2231
diff
changeset
|
68 |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
69 @param namespace(unicode): namespace handled |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
70 @param callback(callbable): method handling the invitation |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
71 For pubsub invitation, it will be called with following arguments: |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
72 - client |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
73 - name(unicode, None): name of the event |
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
74 - extra(dict): extra data |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
75 - service(jid.JID): pubsub service jid |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
76 - node(unicode): pubsub node |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
77 - item_id(unicode, None): pubsub item id |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
78 - item_elt(domish.Element): item of the invitation |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
79 For file sharing invitation, it will be called with following arguments: |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
80 - client |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
81 - name(unicode, None): name of the repository |
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
82 - extra(dict): extra data |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
83 - service(jid.JID): service jid of the file repository |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
84 - repos_type(unicode): type of the repository, can be: |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
85 - files: generic file sharing |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
86 - photos: photos album |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
87 - namespace(unicode, None): namespace of the repository |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
88 - path(unicode, None): path of the repository |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
89 @raise exceptions.ConflictError: this namespace is already registered |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
90 """ |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
91 if namespace in self._ns_cb: |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
92 raise exceptions.ConflictError( |
3028 | 93 "invitation namespace {namespace} is already register with {callback}" |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
94 .format(namespace=namespace, callback=self._ns_cb[namespace])) |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
95 self._ns_cb[namespace] = callback |
2231 | 96 |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
97 def _generateBaseInvitation(self, client, invitee_jid, name, extra): |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
98 """Generate common mess_data end invitation_elt |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
99 |
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
100 @param invitee_jid(jid.JID): entitee to send invitation to |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
101 @param name(unicode, None): name of the shared repository |
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
102 @param extra(dict, None): extra data, where key can be: |
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
103 - thumb_url: URL of a thumbnail |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
104 @return (tuple[dict, domish.Element): mess_data and invitation_elt |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
105 """ |
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
106 mess_data = { |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
107 "from": client.jid, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
108 "to": invitee_jid, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
109 "uid": "", |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
110 "message": {}, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
111 "type": C.MESS_TYPE_CHAT, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
112 "subject": {}, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
113 "extra": {}, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
114 } |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
115 client.generateMessageXML(mess_data) |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
116 invitation_elt = mess_data["xml"].addElement("invitation", NS_INVITATION) |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
117 if name is not None: |
3028 | 118 invitation_elt["name"] = name |
119 thumb_url = extra.get('thumb_url') | |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
120 if thumb_url: |
3028 | 121 if not thumb_url.startswith('http'): |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
122 log.warning( |
3028 | 123 "only http URLs are allowed for thumbnails, got {url}, ignoring" |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
124 .format(url=thumb_url)) |
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
125 else: |
3028 | 126 invitation_elt['thumb_url'] = thumb_url |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
127 return mess_data, invitation_elt |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
128 |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
129 def sendPubsubInvitation( |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
130 self, |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
131 client: SatXMPPEntity, |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
132 invitee_jid: jid.JID, |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
133 service: jid.JID, |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
134 node: str, |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
135 item_id: Optional[str], |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
136 name: Optional[str], |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
137 extra: Optional[dict] |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
138 ) -> None: |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
139 """Send an pubsub invitation in a <message> stanza |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
140 |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
141 @param invitee_jid: entitee to send invitation to |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
142 @param service: pubsub service |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
143 @param node: pubsub node |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
144 @param item_id: pubsub id |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
145 None when the invitation is for a whole node |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
146 @param name: see [_generateBaseInvitation] |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
147 @param extra: see [_generateBaseInvitation] |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
148 """ |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
149 if extra is None: |
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
150 extra = {} |
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
151 mess_data, invitation_elt = self._generateBaseInvitation( |
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
152 client, invitee_jid, name, extra) |
3028 | 153 pubsub_elt = invitation_elt.addElement("pubsub") |
154 pubsub_elt["service"] = service.full() | |
155 pubsub_elt["node"] = node | |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
156 if item_id is None: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
157 try: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
158 namespace = extra.pop("namespace") |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
159 except KeyError: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
160 raise exceptions.DataError('"namespace" key is missing in "extra" data') |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
161 node_data_elt = pubsub_elt.addElement("node_data") |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
162 node_data_elt["namespace"] = namespace |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
163 try: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
164 node_data_elt.addChild(extra["element"]) |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
165 except KeyError: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
166 pass |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
167 else: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
168 pubsub_elt["item"] = item_id |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
169 if "element" in extra: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
170 invitation_elt.addChild(extra.pop("element")) |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
171 client.send(mess_data["xml"]) |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
172 |
3324
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
173 async def sendFileSharingInvitation( |
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
174 self, client, invitee_jid, service, repos_type=None, namespace=None, path=None, |
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
175 name=None, extra=None |
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
176 ): |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
177 """Send a file sharing invitation in a <message> stanza |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
178 |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
179 @param invitee_jid(jid.JID): entitee to send invitation to |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
180 @param service(jid.JID): file sharing service |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
181 @param repos_type(unicode, None): type of files repository, can be: |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
182 - None, "files": files sharing |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
183 - "photos": photos album |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
184 @param namespace(unicode, None): namespace of the shared repository |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
185 @param path(unicode, None): path of the shared repository |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
186 @param name(unicode, None): see [_generateBaseInvitation] |
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
187 @param extra(dict, None): see [_generateBaseInvitation] |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
188 """ |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
189 if extra is None: |
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
190 extra = {} |
3350
cc6164a4973b
plugin list of interests: normalize item ID + added `get` method
Goffi <goffi@goffi.org>
parents:
3324
diff
changeset
|
191 li_plg = self.host.plugins["LIST_INTEREST"] |
cc6164a4973b
plugin list of interests: normalize item ID + added `get` method
Goffi <goffi@goffi.org>
parents:
3324
diff
changeset
|
192 li_plg.normaliseFileSharingService(client, service) |
3324
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
193 |
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
194 # FIXME: not the best place to adapt permission, but it's necessary to check them |
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
195 # for UX |
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
196 try: |
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
197 await self.host.plugins['XEP-0329'].affiliationsSet( |
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
198 client, service, namespace, path, {invitee_jid: "member"} |
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
199 ) |
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
200 except Exception as e: |
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
201 log.warning(f"Can't set affiliation: {e}") |
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
202 |
3351
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
203 if "thumb_url" not in extra: |
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
204 # we have no thumbnail, we check in our own list of interests if there is one |
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
205 try: |
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
206 item_id = li_plg.getFileSharingId(service, namespace, path) |
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
207 own_interest = await li_plg.get(client, item_id) |
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
208 except exceptions.NotFound: |
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
209 log.debug( |
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
210 "no thumbnail found for file sharing interest at " |
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
211 f"[{service}/{namespace}]{path}" |
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
212 ) |
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
213 else: |
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
214 try: |
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
215 extra['thumb_url'] = own_interest['thumb_url'] |
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
216 except KeyError: |
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
217 pass |
19bad15f4c0a
plugin invitation: if "thumb_url" is not set, try to use one from list of interests
Goffi <goffi@goffi.org>
parents:
3350
diff
changeset
|
218 |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
219 mess_data, invitation_elt = self._generateBaseInvitation( |
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
220 client, invitee_jid, name, extra) |
3028 | 221 file_sharing_elt = invitation_elt.addElement("file_sharing") |
222 file_sharing_elt["service"] = service.full() | |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
223 if repos_type is not None: |
3028 | 224 if repos_type not in ("files", "photos"): |
225 msg = "unknown repository type: {repos_type}".format( | |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
226 repos_type=repos_type) |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
227 log.warning(msg) |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
228 raise exceptions.DateError(msg) |
3028 | 229 file_sharing_elt["type"] = repos_type |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
230 if namespace is not None: |
3028 | 231 file_sharing_elt["namespace"] = namespace |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
232 if path is not None: |
3028 | 233 file_sharing_elt["path"] = path |
3324
b57b5e42e894
plugins invitation, invitation-file: adapt service JID and affiliation:
Goffi <goffi@goffi.org>
parents:
3137
diff
changeset
|
234 client.send(mess_data["xml"]) |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
235 |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
236 async def _parsePubsubElt(self, client, pubsub_elt): |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
237 try: |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
238 service = jid.JID(pubsub_elt["service"]) |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
239 node = pubsub_elt["node"] |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
240 except (RuntimeError, KeyError): |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
241 raise exceptions.DataError("Bad invitation, ignoring") |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
242 |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
243 item_id = pubsub_elt.getAttribute("item") |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
244 |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
245 if item_id is not None: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
246 try: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
247 items, metadata = await self._p.getItems( |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
248 client, service, node, item_ids=[item_id] |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
249 ) |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
250 except Exception as e: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
251 log.warning(_("Can't get item linked with invitation: {reason}").format( |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
252 reason=e)) |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
253 try: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
254 item_elt = items[0] |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
255 except IndexError: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
256 log.warning(_("Invitation was linking to a non existing item")) |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
257 raise exceptions.DataError |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
258 |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
259 try: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
260 namespace = item_elt.firstChildElement().uri |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
261 except Exception as e: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
262 log.warning(_("Can't retrieve namespace of invitation: {reason}").format( |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
263 reason = e)) |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
264 raise exceptions.DataError |
2287
ea869f30f204
plugin events: added eventInvite command as a helper for the complex invitation workflow:
Goffi <goffi@goffi.org>
parents:
2272
diff
changeset
|
265 |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
266 args = [service, node, item_id, item_elt] |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
267 else: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
268 try: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
269 node_data_elt = next(pubsub_elt.elements((NS_INVITATION, "node_data"))) |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
270 except StopIteration: |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
271 raise exceptions.DataError("Bad invitation, ignoring") |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
272 namespace = node_data_elt['namespace'] |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
273 args = [service, node, None, node_data_elt] |
2287
ea869f30f204
plugin events: added eventInvite command as a helper for the complex invitation workflow:
Goffi <goffi@goffi.org>
parents:
2272
diff
changeset
|
274 |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
275 return namespace, args |
2287
ea869f30f204
plugin events: added eventInvite command as a helper for the complex invitation workflow:
Goffi <goffi@goffi.org>
parents:
2272
diff
changeset
|
276 |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
277 async def _parseFileSharingElt(self, client, file_sharing_elt): |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
278 try: |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
279 service = jid.JID(file_sharing_elt["service"]) |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
280 except (RuntimeError, KeyError): |
3028 | 281 log.warning(_("Bad invitation, ignoring")) |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
282 raise exceptions.DataError |
3028 | 283 repos_type = file_sharing_elt.getAttribute("type", "files") |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
284 sharing_ns = file_sharing_elt.getAttribute("namespace") |
3028 | 285 path = file_sharing_elt.getAttribute("path") |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
286 args = [service, repos_type, sharing_ns, path] |
3028 | 287 ns_fis = self.host.getNamespace("fis") |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
288 return ns_fis, args |
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
289 |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
290 async def onInvitation(self, message_elt, client): |
3028 | 291 log.debug("invitation received [{profile}]".format(profile=client.profile)) |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
292 invitation_elt = message_elt.invitation |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
293 |
3028 | 294 name = invitation_elt.getAttribute("name") |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
295 extra = {} |
3028 | 296 if invitation_elt.hasAttribute("thumb_url"): |
297 extra['thumb_url'] = invitation_elt['thumb_url'] | |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
298 |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
299 for elt in invitation_elt.elements(): |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
300 if elt.uri != NS_INVITATION: |
3028 | 301 log.warning("unexpected element: {xml}".format(xml=elt.toXml())) |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
302 continue |
3028 | 303 if elt.name == "pubsub": |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
304 method = self._parsePubsubElt |
3028 | 305 elif elt.name == "file_sharing": |
2913
672e6be3290f
plugins sharing invitation, invitation, list of interest: handle invitation to a file sharing repository
Goffi <goffi@goffi.org>
parents:
2912
diff
changeset
|
306 method = self._parseFileSharingElt |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
307 else: |
3028 | 308 log.warning("not implemented invitation element: {xml}".format( |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
309 xml = elt.toXml())) |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
310 continue |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
311 try: |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
312 namespace, args = await method(client, elt) |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
313 except exceptions.DataError: |
3028 | 314 log.warning("Can't parse invitation element: {xml}".format( |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
315 xml = elt.toXml())) |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
316 continue |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
317 |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
318 try: |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
319 cb = self._ns_cb[namespace] |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
320 except KeyError: |
2931
b256e90612d0
plugins invitation*, events: added an extra parameter and use it to keep a thumnail URL
Goffi <goffi@goffi.org>
parents:
2913
diff
changeset
|
321 log.warning(_( |
3028 | 322 'No handler for namespace "{namespace}", invitation ignored') |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
323 .format(namespace=namespace)) |
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
324 else: |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
325 await utils.asDeferred(cb, client, namespace, name, extra, *args) |
2287
ea869f30f204
plugin events: added eventInvite command as a helper for the complex invitation workflow:
Goffi <goffi@goffi.org>
parents:
2272
diff
changeset
|
326 |
ea869f30f204
plugin events: added eventInvite command as a helper for the complex invitation workflow:
Goffi <goffi@goffi.org>
parents:
2272
diff
changeset
|
327 |
3028 | 328 @implementer(iwokkel.IDisco) |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
329 class PubsubInvitationHandler(XMPPHandler): |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
330 |
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
331 def __init__(self, plugin_parent): |
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
332 self.plugin_parent = plugin_parent |
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
333 |
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
334 def connectionInitialized(self): |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
335 self.xmlstream.addObserver( |
3462
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
336 INVITATION, |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
337 lambda message_elt: defer.ensureDeferred( |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
338 self.plugin_parent.onInvitation(message_elt, client=self.parent) |
12dc234f698c
plugin invitation: pubsub invitations:
Goffi <goffi@goffi.org>
parents:
3359
diff
changeset
|
339 ), |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
340 ) |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
341 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
342 def getDiscoInfo(self, requestor, target, nodeIdentifier=""): |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
343 return [ |
2912
a3faf1c86596
plugin events: refactored invitation and personal lists logic:
Goffi <goffi@goffi.org>
parents:
2771
diff
changeset
|
344 disco.DiscoFeature(NS_INVITATION), |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
345 ] |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
346 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2616
diff
changeset
|
347 def getDiscoItems(self, requestor, target, nodeIdentifier=""): |
2616
1cc88adb5142
plugin events: invitations improvments + personal list
Goffi <goffi@goffi.org>
parents:
2612
diff
changeset
|
348 return [] |