annotate src/plugins/plugin_xep_0070.py @ 2528:65e278997715

component file sharing: comments metadata: new <comments> element is added to file metadata, it contains the URL to the comments virtual node and the count of comments (this way client knows if it make sense to request comments or not). Fixed triggers in plugin XEP-0264 (return value was missing). New trigger in plugin XEP-0329 to allow component to add metadata (used here for comments url).
author Goffi <goffi@goffi.org>
date Fri, 16 Mar 2018 18:43:11 +0100
parents 33c8c4973743
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2005
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
1 #!/usr/bin/python
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
3
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
4 # SAT plugin for managing xep-0070
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
5 # Copyright (C) 2009-2016 Geoffrey POUZET (chteufleur@kingpenguin.tk)
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
6
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
7 # This program is free software: you can redistribute it and/or modify
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
10 # (at your option) any later version.
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
11
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
12 # This program is distributed in the hope that it will be useful,
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
15 # GNU Affero General Public License for more details.
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
16
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
19 from sat.core.i18n import _, D_
2145
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
20 from sat.core.constants import Const as C
2005
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
21 from sat.core.log import getLogger
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
22 from twisted.words.protocols.jabber import xmlstream
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
23 from twisted.words.protocols import jabber
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
24 log = getLogger(__name__)
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
25 from sat.tools import xml_tools
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
26
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
27 from wokkel import disco, iwokkel
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
28 from zope.interface import implements
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
29 try:
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
30 from twisted.words.protocols.xmlstream import XMPPHandler
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
31 except ImportError:
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
32 from wokkel.subprotocols import XMPPHandler
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
33
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
34
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
35 NS_HTTP_AUTH = 'http://jabber.org/protocol/http-auth'
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
36
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
37 IQ = 'iq'
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
38 IQ_GET = '/'+IQ+'[@type="get"]'
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
39 IQ_HTTP_AUTH_REQUEST = IQ_GET + '/confirm[@xmlns="' + NS_HTTP_AUTH + '"]'
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
40
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
41 MSG = 'message'
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
42 MSG_GET = '/'+MSG+'[@type="normal"]'
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
43 MSG_HTTP_AUTH_REQUEST = MSG_GET + '/confirm[@xmlns="' + NS_HTTP_AUTH + '"]'
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
44
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
45
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
46 PLUGIN_INFO = {
2145
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
47 C.PI_NAME: "XEP-0070 Plugin",
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
48 C.PI_IMPORT_NAME: "XEP-0070",
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
49 C.PI_TYPE: "XEP",
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
50 C.PI_PROTOCOLS: ["XEP-0070"],
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
51 C.PI_DEPENDENCIES: [],
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
52 C.PI_MAIN: "XEP_0070",
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
53 C.PI_HANDLER: "yes",
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
54 C.PI_DESCRIPTION: _("""Implementation of HTTP Requests via XMPP""")
2005
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
55 }
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
56
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
57
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
58 class XEP_0070(object):
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
59 """
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
60 Implementation for XEP 0070.
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
61 """
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
62
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
63 def __init__(self, host):
2094
438a49dbfe87 xep-0070: fixed use of byte string instead of unicode
Goffi <goffi@goffi.org>
parents: 2014
diff changeset
64 log.info(_(u"Plugin XEP_0070 initialization"))
2005
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
65 self.host = host
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
66 self._dictRequest = dict()
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
67
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2129
diff changeset
68 def getHandler(self, client):
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 2129
diff changeset
69 return XEP_0070_handler(self, client.profile)
2005
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
70
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
71 def onHttpAuthRequestIQ(self, iq_elt, client):
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
72 """This method is called on confirmation request received (XEP-0070 #4.5)
2094
438a49dbfe87 xep-0070: fixed use of byte string instead of unicode
Goffi <goffi@goffi.org>
parents: 2014
diff changeset
73
2005
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
74 @param iq_elt: IQ element
2094
438a49dbfe87 xep-0070: fixed use of byte string instead of unicode
Goffi <goffi@goffi.org>
parents: 2014
diff changeset
75 @param client: %(doc_client)s
438a49dbfe87 xep-0070: fixed use of byte string instead of unicode
Goffi <goffi@goffi.org>
parents: 2014
diff changeset
76 """
2005
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
77 log.info(_("XEP-0070 Verifying HTTP Requests via XMPP (iq)"))
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
78 self._treatHttpAuthRequest(iq_elt, IQ, client)
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
79
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
80 def onHttpAuthRequestMsg(self, msg_elt, client):
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
81 """This method is called on confirmation request received (XEP-0070 #4.5)
2094
438a49dbfe87 xep-0070: fixed use of byte string instead of unicode
Goffi <goffi@goffi.org>
parents: 2014
diff changeset
82
2005
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
83 @param msg_elt: message element
2094
438a49dbfe87 xep-0070: fixed use of byte string instead of unicode
Goffi <goffi@goffi.org>
parents: 2014
diff changeset
84 @param client: %(doc_client)s
438a49dbfe87 xep-0070: fixed use of byte string instead of unicode
Goffi <goffi@goffi.org>
parents: 2014
diff changeset
85 """
2005
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
86 log.info(_("XEP-0070 Verifying HTTP Requests via XMPP (message)"))
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
87 self._treatHttpAuthRequest(msg_elt, MSG, client)
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
88
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
89 def _treatHttpAuthRequest(self, elt, stanzaType, client):
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
90 elt.handled = True
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
91 auth_elt = elt.elements(NS_HTTP_AUTH, 'confirm').next()
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
92 auth_id = auth_elt['id']
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
93 auth_method = auth_elt['method']
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
94 auth_url = auth_elt['url']
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
95 self._dictRequest[client] = (auth_id, auth_method, auth_url, stanzaType, elt)
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
96
2094
438a49dbfe87 xep-0070: fixed use of byte string instead of unicode
Goffi <goffi@goffi.org>
parents: 2014
diff changeset
97 confirm_ui = xml_tools.XMLUI("form", title=D_(u"Auth confirmation"), submit_id='')
438a49dbfe87 xep-0070: fixed use of byte string instead of unicode
Goffi <goffi@goffi.org>
parents: 2014
diff changeset
98 confirm_ui.addText(D_(u"{} needs to validate your identity, do you agreeĀ ?".format(auth_url)))
438a49dbfe87 xep-0070: fixed use of byte string instead of unicode
Goffi <goffi@goffi.org>
parents: 2014
diff changeset
99 confirm_ui.addText(D_(u"Validation code : {}".format(auth_id)))
438a49dbfe87 xep-0070: fixed use of byte string instead of unicode
Goffi <goffi@goffi.org>
parents: 2014
diff changeset
100 confirm_ui.addText(D_(u"Please check that this code is the same as on {}".format(auth_url)))
438a49dbfe87 xep-0070: fixed use of byte string instead of unicode
Goffi <goffi@goffi.org>
parents: 2014
diff changeset
101 confirm_ui.addText(u"")
438a49dbfe87 xep-0070: fixed use of byte string instead of unicode
Goffi <goffi@goffi.org>
parents: 2014
diff changeset
102 confirm_ui.addText(D_(u"Submit to authorize, cancel otherwise."))
2005
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
103 d = xml_tools.deferredUI(self.host, confirm_ui, chained=False)
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
104 d.addCallback(self._authRequestCallback, client.profile)
2094
438a49dbfe87 xep-0070: fixed use of byte string instead of unicode
Goffi <goffi@goffi.org>
parents: 2014
diff changeset
105 self.host.actionNew({u"xmlui": confirm_ui.toXml()}, profile=client.profile)
2005
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
106
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
107 def _authRequestCallback(self, result, profile):
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
108 client = self.host.getClient(profile)
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
109 try:
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
110 cancelled = result['cancelled']
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
111 except KeyError:
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
112 cancelled = False
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
113
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
114 authorized = False
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
115
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
116 if cancelled:
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
117 auth_id, auth_method, auth_url, stanzaType, elt = self._dictRequest[client]
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
118 del self._dictRequest[client]
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
119 authorized = False
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
120 else:
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
121 try:
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
122 auth_id, auth_method, auth_url, stanzaType, elt = self._dictRequest[client]
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
123 del self._dictRequest[client]
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
124 authorized = True
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
125 except KeyError:
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
126 authorized = False
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
127
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
128 if authorized:
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
129 if (stanzaType == IQ):
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
130 # iq
2094
438a49dbfe87 xep-0070: fixed use of byte string instead of unicode
Goffi <goffi@goffi.org>
parents: 2014
diff changeset
131 log.debug(_(u"XEP-0070 reply iq"))
2005
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
132 iq_result_elt = xmlstream.toResponse(elt, 'result')
2129
6a66c8c5a567 core: replaced calls to client.xmlstream.send by client.send which is the right method to use. client.xmlstream should not be used directly
Goffi <goffi@goffi.org>
parents: 2094
diff changeset
133 client.send(iq_result_elt)
2005
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
134 elif (stanzaType == MSG):
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
135 # message
2094
438a49dbfe87 xep-0070: fixed use of byte string instead of unicode
Goffi <goffi@goffi.org>
parents: 2014
diff changeset
136 log.debug(_(u"XEP-0070 reply message"))
2005
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
137 msg_result_elt = xmlstream.toResponse(elt, 'result')
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
138 msg_result_elt.addChild(elt.elements(NS_HTTP_AUTH, 'confirm').next())
2129
6a66c8c5a567 core: replaced calls to client.xmlstream.send by client.send which is the right method to use. client.xmlstream should not be used directly
Goffi <goffi@goffi.org>
parents: 2094
diff changeset
139 client.send(msg_result_elt)
2005
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
140 else:
2094
438a49dbfe87 xep-0070: fixed use of byte string instead of unicode
Goffi <goffi@goffi.org>
parents: 2014
diff changeset
141 log.debug(_(u"XEP-0070 reply error"))
2005
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
142 result_elt = jabber.error.StanzaError("not-authorized").toResponse(elt)
2129
6a66c8c5a567 core: replaced calls to client.xmlstream.send by client.send which is the right method to use. client.xmlstream should not be used directly
Goffi <goffi@goffi.org>
parents: 2094
diff changeset
143 client.send(result_elt)
2005
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
144
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
145
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
146 class XEP_0070_handler(XMPPHandler):
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
147 implements(iwokkel.IDisco)
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
148
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
149 def __init__(self, plugin_parent, profile):
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
150 self.plugin_parent = plugin_parent
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
151 self.host = plugin_parent.host
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
152 self.profile = profile
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
153
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
154 def connectionInitialized(self):
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
155 self.xmlstream.addObserver(IQ_HTTP_AUTH_REQUEST, self.plugin_parent.onHttpAuthRequestIQ, client=self.parent)
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
156 self.xmlstream.addObserver(MSG_HTTP_AUTH_REQUEST, self.plugin_parent.onHttpAuthRequestMsg, client=self.parent)
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
157
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
158 def getDiscoInfo(self, requestor, target, nodeIdentifier=''):
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
159 return [disco.DiscoFeature(NS_HTTP_AUTH)]
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
160
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
161 def getDiscoItems(self, requestor, target, nodeIdentifier=''):
2afd5bd781ef plugin XEP-0070: implementation of XEP-0070 (verifying HTTP request via XMPP)
Geoffrey POUZET <chteufleur@kingpenguin.tk>
parents:
diff changeset
162 return []