annotate src/plugins/plugin_misc_ip.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 67cc54b01a12
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1934
2daf7b4c6756 use of /usr/bin/env instead of /usr/bin/python in shebang
Goffi <goffi@goffi.org>
parents: 1766
diff changeset
1 #!/usr/bin/env python2
1534
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
2 # -*- coding: utf-8 -*-
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
3
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
4 # SAT plugin for IP address discovery
2483
0046283a285d dates update
Goffi <goffi@goffi.org>
parents: 2414
diff changeset
5 # Copyright (C) 2009-2018 Jérôme Poisson (goffi@goffi.org)
1534
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
6
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
7 # This program is free software: you can redistribute it and/or modify
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
8 # it under the terms of the GNU Affero General Public License as published by
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
9 # the Free Software Foundation, either version 3 of the License, or
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
10 # (at your option) any later version.
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
11
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
12 # This program is distributed in the hope that it will be useful,
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
15 # GNU Affero General Public License for more details.
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
16
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
17 # You should have received a copy of the GNU Affero General Public License
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
18 # along with this program. If not, see <http://www.gnu.org/licenses/>.
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
19
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
20 from sat.core.i18n import _, D_
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
21 from sat.core.constants import Const as C
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
22 from sat.core.log import getLogger
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
23 log = getLogger(__name__)
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
24 from sat.tools import xml_tools
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
25 from twisted.web import client as webclient
1953
f6d560cabeee plugin misc ip: fixed exception when a web error happen while retrieving IP from external website
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
26 from twisted.web import error as web_error
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
27 from twisted.internet import defer
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
28 from twisted.internet import reactor
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
29 from twisted.internet import protocol
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
30 from twisted.internet import endpoints
1555
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
31 from twisted.internet import error as internet_error
1566
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
32 from zope.interface import implements
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
33 from wokkel import disco, iwokkel
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
34 from twisted.words.protocols.jabber.xmlstream import XMPPHandler
1668
a9e86f660653 plugin ip: fixed ip check (XEP-0279) use
Goffi <goffi@goffi.org>
parents: 1576
diff changeset
35 from twisted.words.protocols.jabber.error import StanzaError
1534
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
36 import urlparse
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
37 try:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
38 import netifaces
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
39 except ImportError:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
40 log.warning(u"netifaces is not available, it help discovering IPs, you can install it on https://pypi.python.org/pypi/netifaces")
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
41 netifaces = None
1534
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
42
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
43
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
44 PLUGIN_INFO = {
2145
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
45 C.PI_NAME: "IP discovery",
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
46 C.PI_IMPORT_NAME: "IP",
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
47 C.PI_TYPE: C.PLUG_TYPE_MISC,
2504
67cc54b01a12 plugin file sharing component: first draft:
Goffi <goffi@goffi.org>
parents: 2489
diff changeset
48 C.PI_MODES: C.PLUG_MODE_BOTH,
2145
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
49 C.PI_PROTOCOLS: ["XEP-0279"],
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
50 C.PI_RECOMMENDATIONS: ["NAT-PORT"],
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
51 C.PI_MAIN: "IPPlugin",
33c8c4973743 core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents: 2144
diff changeset
52 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
53 C.PI_DESCRIPTION: _("""This plugin help to discover our external IP address.""")
1534
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
54 }
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
55
1953
f6d560cabeee plugin misc ip: fixed exception when a web error happen while retrieving IP from external website
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
56 # TODO: GET_IP_PAGE should be configurable in sat.conf
1954
a74047906dfd plugin misc ip: changed URL of GET_IP_PAGE for the new one on salut-a-toi.org
Goffi <goffi@goffi.org>
parents: 1953
diff changeset
57 GET_IP_PAGE = "http://salut-a-toi.org/whereami/" # This page must only return external IP of the requester
1534
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
58 GET_IP_LABEL = D_(u"Allow external get IP")
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
59 GET_IP_CATEGORY = "General"
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
60 GET_IP_NAME = "allow_get_ip"
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
61 GET_IP_CONFIRM_TITLE = D_(u"Confirm external site request")
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
62 GET_IP_CONFIRM = D_(u"""To facilitate data transfer, we need to contact a website.
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
63 A request will be done on {page}
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
64 That means that administrators of {domain} can know that you use "{app_name}" and your IP Address.
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
65
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
66 IP address is an identifier to locate you on Internet (similar to a phone number).
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
67
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
68 Do you agree to do this request ?
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
69 """).format(
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
70 page = GET_IP_PAGE,
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
71 domain = urlparse.urlparse(GET_IP_PAGE).netloc,
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
72 app_name = C.APP_NAME)
1566
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
73 NS_IP_CHECK = "urn:xmpp:sic:1"
1534
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
74
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
75 PARAMS = """
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
76 <params>
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
77 <general>
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
78 <category name="{category}">
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
79 <param name="{name}" label="{label}" type="bool" />
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
80 </category>
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
81 </general>
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
82 </params>
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
83 """.format(category=GET_IP_CATEGORY, name=GET_IP_NAME, label=GET_IP_LABEL)
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
84
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
85
1534
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
86 class IPPlugin(object):
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
87 # TODO: refresh IP if a new connection is detected
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
88 # TODO: manage IPv6 when implemented in SàT
1534
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
89
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
90 def __init__(self, host):
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
91 log.info(_("plugin IP discovery initialization"))
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
92 self.host = host
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
93 host.memory.updateParams(PARAMS)
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
94
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
95 # NAT-Port
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
96 try:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
97 self._nat = host.plugins['NAT-PORT']
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
98 except KeyError:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
99 log.debug(u"NAT port plugin not available")
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
100 self._nat = None
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
101
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
102 # XXX: cache is kept until SàT is restarted
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
103 # if IP may have changed, use self.refreshIP
1555
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
104 self._external_ip_cache = None
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
105 self._local_ip_cache = None
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
106
2144
1d3f73e065e1 core, jp: component handling + client handling refactoring:
Goffi <goffi@goffi.org>
parents: 1954
diff changeset
107 def getHandler(self, client):
1566
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
108 return IPPlugin_handler()
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
109
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
110 def refreshIP(self):
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
111 # FIXME: use a trigger instead ?
1555
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
112 self._external_ip_cache = None
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
113 self._local_ip_cache = None
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
114
2489
e2a7bb875957 plugin pipe/stream, file transfert: refactoring and improvments:
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
115 def _externalAllowed(self, client):
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
116 """Return value of parameter with autorisation of user to do external requests
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
117
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
118 if parameter is not set, a dialog is shown to use to get its confirmation, and parameted is set according to answer
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
119 @return (defer.Deferred[bool]): True if external request is autorised
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
120 """
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
121 allow_get_ip = self.host.memory.params.getParamA(GET_IP_NAME, GET_IP_CATEGORY, use_default=False)
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
122
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
123 if allow_get_ip is None:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
124 # we don't have autorisation from user yet to use get_ip, we ask him
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
125 def setParam(allowed):
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
126 # FIXME: we need to use boolConst as setParam only manage str/unicode
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
127 # need to be fixed when params will be refactored
1555
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
128 self.host.memory.setParam(GET_IP_NAME, C.boolConst(allowed), GET_IP_CATEGORY)
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
129 return allowed
2489
e2a7bb875957 plugin pipe/stream, file transfert: refactoring and improvments:
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
130 d = xml_tools.deferConfirm(self.host, _(GET_IP_CONFIRM), _(GET_IP_CONFIRM_TITLE), profile=client.profile)
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
131 d.addCallback(setParam)
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
132 return d
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
133
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
134 return defer.succeed(allow_get_ip)
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
135
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
136 def _filterAddresse(self, ip_addr):
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
137 """Filter acceptable addresses
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
138
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
139 For now, just remove IPv4 local addresses
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
140 @param ip_addr(str): IP addresse
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
141 @return (bool): True if addresse is acceptable
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
142 """
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
143 return not ip_addr.startswith('127.')
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
144
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
145 def _insertFirst(self, addresses, ip_addr):
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
146 """Insert ip_addr as first item in addresses
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
147
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
148 @param ip_addr(str): IP addresse
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
149 @param addresses(list): list of IP addresses
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
150 """
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
151 if ip_addr in addresses:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
152 if addresses[0] != ip_addr:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
153 addresses.remove(ip_addr)
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
154 addresses.insert(0, ip_addr)
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
155 else:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
156 addresses.insert(0, ip_addr)
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
157
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
158 def _getIPFromExternal(self, ext_url):
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
159 """Get local IP by doing a connection on an external url
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
160
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
161 @param ext_utl(str): url to connect to
1555
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
162 @return (D(str)): return local IP
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
163 """
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
164 url = urlparse.urlparse(ext_url)
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
165 port = url.port
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
166 if port is None:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
167 if url.scheme=='http':
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
168 port = 80
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
169 elif url.scheme=='https':
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
170 port = 443
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
171 else:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
172 log.error(u"Unknown url scheme: {}".format(url.scheme))
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
173 defer.returnValue(None)
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
174 if url.hostname is None:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
175 log.error(u"Can't find url hostname for {}".format(GET_IP_PAGE))
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
176
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
177 point = endpoints.TCP4ClientEndpoint(reactor, url.hostname, port)
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
178 def gotConnection(p):
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
179 local_ip = p.transport.getHost().host
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
180 p.transport.loseConnection()
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
181 return local_ip
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
182
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
183 d = endpoints.connectProtocol(point, protocol.Protocol())
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
184 d.addCallback(gotConnection)
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
185 return d
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
186
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
187 @defer.inlineCallbacks
2489
e2a7bb875957 plugin pipe/stream, file transfert: refactoring and improvments:
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
188 def getLocalIPs(self, client):
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
189 """Try do discover local area network IPs
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
190
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
191 @return (deferred): list of lan IP addresses
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
192 if there are several addresses, the one used with the server is put first
1576
d5f59ba166fe plugins IP: getLocalIPs now return localhost IP instead of an empty list if no non-localhost ip can be found
Goffi <goffi@goffi.org>
parents: 1566
diff changeset
193 if no address is found, localhost IP will be in the list
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
194 """
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
195 # TODO: manage permission requesting (e.g. for UMTS link)
1555
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
196 if self._local_ip_cache is not None:
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
197 defer.returnValue(self._local_ip_cache)
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
198 addresses = []
1576
d5f59ba166fe plugins IP: getLocalIPs now return localhost IP instead of an empty list if no non-localhost ip can be found
Goffi <goffi@goffi.org>
parents: 1566
diff changeset
199 localhost = ['127.0.0.1']
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
200
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
201 # we first try our luck with netifaces
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
202 if netifaces is not None:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
203 addresses = []
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
204 for interface in netifaces.interfaces():
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
205 if_addresses = netifaces.ifaddresses(interface)
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
206 try:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
207 inet_list = if_addresses[netifaces.AF_INET]
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
208 except KeyError:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
209 continue
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
210 for data in inet_list:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
211 addresse = data['addr']
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
212 if self._filterAddresse(addresse):
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
213 addresses.append(addresse)
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
214
1576
d5f59ba166fe plugins IP: getLocalIPs now return localhost IP instead of an empty list if no non-localhost ip can be found
Goffi <goffi@goffi.org>
parents: 1566
diff changeset
215 # then we use our connection to server
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
216 ip = client.xmlstream.transport.getHost().host
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
217 if self._filterAddresse(ip):
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
218 self._insertFirst(addresses, ip)
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
219 defer.returnValue(addresses)
1534
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
220
1576
d5f59ba166fe plugins IP: getLocalIPs now return localhost IP instead of an empty list if no non-localhost ip can be found
Goffi <goffi@goffi.org>
parents: 1566
diff changeset
221 # if server is local, we try with NAT-Port
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
222 if self._nat is not None:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
223 nat_ip = yield self._nat.getIP(local=True)
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
224 if nat_ip is not None:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
225 self._insertFirst(addresses, nat_ip)
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
226 defer.returnValue(addresses)
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
227
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
228 if addresses:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
229 defer.returnValue(addresses)
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
230
1576
d5f59ba166fe plugins IP: getLocalIPs now return localhost IP instead of an empty list if no non-localhost ip can be found
Goffi <goffi@goffi.org>
parents: 1566
diff changeset
231 # still not luck, we need to contact external website
2489
e2a7bb875957 plugin pipe/stream, file transfert: refactoring and improvments:
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
232 allow_get_ip = yield self._externalAllowed(client)
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
233
1576
d5f59ba166fe plugins IP: getLocalIPs now return localhost IP instead of an empty list if no non-localhost ip can be found
Goffi <goffi@goffi.org>
parents: 1566
diff changeset
234 if not allow_get_ip:
d5f59ba166fe plugins IP: getLocalIPs now return localhost IP instead of an empty list if no non-localhost ip can be found
Goffi <goffi@goffi.org>
parents: 1566
diff changeset
235 defer.returnValue(addresses or localhost)
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
236
1555
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
237 try:
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
238 ip_tuple = yield self._getIPFromExternal(GET_IP_PAGE)
1566
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
239 except (internet_error.DNSLookupError, internet_error.TimeoutError):
1555
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
240 log.warning(u"Can't access Domain Name System")
1576
d5f59ba166fe plugins IP: getLocalIPs now return localhost IP instead of an empty list if no non-localhost ip can be found
Goffi <goffi@goffi.org>
parents: 1566
diff changeset
241 defer.returnValue(addresses or localhost)
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
242 self._insertFirst(addresses, ip_tuple.local)
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
243 defer.returnValue(addresses)
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
244
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
245 @defer.inlineCallbacks
2489
e2a7bb875957 plugin pipe/stream, file transfert: refactoring and improvments:
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
246 def getExternalIP(self, client):
1534
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
247 """Try to discover external IP
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
248
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
249 @return (deferred): external IP address or None if it can't be discovered
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
250 """
1555
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
251 if self._external_ip_cache is not None:
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
252 defer.returnValue(self._external_ip_cache)
1534
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
253
2148
a543eda2c923 core (memory/disco): getInfos now handle node + use client instead of profile in many methods
Goffi <goffi@goffi.org>
parents: 2145
diff changeset
254
1566
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
255 # we first try with XEP-0279
2148
a543eda2c923 core (memory/disco): getInfos now handle node + use client instead of profile in many methods
Goffi <goffi@goffi.org>
parents: 2145
diff changeset
256 ip_check = yield self.host.hasFeature(client, NS_IP_CHECK)
1668
a9e86f660653 plugin ip: fixed ip check (XEP-0279) use
Goffi <goffi@goffi.org>
parents: 1576
diff changeset
257 if ip_check:
1566
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
258 log.debug(u"Server IP Check available, we use it to retrieve our IP")
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
259 iq_elt = client.IQ("get")
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
260 iq_elt.addElement((NS_IP_CHECK, 'address'))
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
261 try:
1668
a9e86f660653 plugin ip: fixed ip check (XEP-0279) use
Goffi <goffi@goffi.org>
parents: 1576
diff changeset
262 result_elt = yield iq_elt.send()
1566
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
263 address_elt = result_elt.elements(NS_IP_CHECK, 'address').next()
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
264 ip_elt = address_elt.elements(NS_IP_CHECK,'ip').next()
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
265 except StopIteration:
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
266 log.warning(u"Server returned invalid result on XEP-0279 request, we ignore it")
1668
a9e86f660653 plugin ip: fixed ip check (XEP-0279) use
Goffi <goffi@goffi.org>
parents: 1576
diff changeset
267 except StanzaError as e:
a9e86f660653 plugin ip: fixed ip check (XEP-0279) use
Goffi <goffi@goffi.org>
parents: 1576
diff changeset
268 log.warning(u"error while requesting ip to server: {}".format(e))
1566
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
269 else:
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
270 # FIXME: server IP may not be the same as external IP (server can be on local machine or network)
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
271 # IP should be checked to see if we have a local one, and rejected in this case
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
272 external_ip = str(ip_elt)
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
273 log.debug(u"External IP found: {}".format(external_ip))
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
274 self._external_ip_cache = external_ip
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
275 defer.returnValue(self._external_ip_cache)
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
276
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
277 # then with NAT-Port
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
278 if self._nat is not None:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
279 nat_ip = yield self._nat.getIP()
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
280 if nat_ip is not None:
1555
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
281 self._external_ip_cache = nat_ip
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
282 defer.returnValue(nat_ip)
1534
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
283
1566
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
284 # and finally by requesting external website
2489
e2a7bb875957 plugin pipe/stream, file transfert: refactoring and improvments:
Goffi <goffi@goffi.org>
parents: 2483
diff changeset
285 allow_get_ip = yield self._externalAllowed(client)
1555
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
286 try:
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
287 ip = (yield webclient.getPage(GET_IP_PAGE)) if allow_get_ip else None
1566
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
288 except (internet_error.DNSLookupError, internet_error.TimeoutError):
1555
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
289 log.warning(u"Can't access Domain Name System")
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
290 ip = None
1953
f6d560cabeee plugin misc ip: fixed exception when a web error happen while retrieving IP from external website
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
291 except web_error.Error as e:
f6d560cabeee plugin misc ip: fixed exception when a web error happen while retrieving IP from external website
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
292 log.warning(u"Error while retrieving IP on {url}: {message}".format(url=GET_IP_PAGE, message=e))
f6d560cabeee plugin misc ip: fixed exception when a web error happen while retrieving IP from external website
Goffi <goffi@goffi.org>
parents: 1934
diff changeset
293 ip = None
1555
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
294 else:
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
295 self._external_ip_cache = ip
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
296 defer.returnValue(ip)
1566
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
297
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
298
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
299 class IPPlugin_handler(XMPPHandler):
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
300 implements(iwokkel.IDisco)
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
301
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
302 def getDiscoInfo(self, requestor, target, nodeIdentifier=''):
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
303 return [disco.DiscoFeature(NS_IP_CHECK)]
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
304
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
305 def getDiscoItems(self, requestor, target, nodeIdentifier=''):
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
306 return []