annotate src/plugins/plugin_misc_ip.py @ 1955:633b5c21aefd

backend, frontend: messages refactoring (huge commit, not finished): /!\ database schema has been modified, do a backup before updating message have been refactored, here are the main changes: - languages are now handled - all messages have an uid (internal to SàT) - message updating is anticipated - subject is now first class - new naming scheme is used newMessage => messageNew, getHistory => historyGet, sendMessage => messageSend - minimal compatibility refactoring in quick_frontend/Primitivus, better refactoring should follow - threads handling - delayed messages are saved into history - info messages may also be saved in history (e.g. to keep track of people joining/leaving a room) - duplicate messages should be avoided - historyGet return messages in right order, no need to sort again - plugins have been updated to follow new features, some of them need to be reworked (e.g. OTR) - XEP-0203 (Delayed Delivery) is now fully handled in core, the plugin just handle disco and creation of a delay element - /!\ jp and Libervia are currently broken, as some features of Primitivus It has been put in one huge commit to avoid breaking messaging between changes. This is the main part of message refactoring, other commits will follow to take profit of the new features/behaviour.
author Goffi <goffi@goffi.org>
date Tue, 24 May 2016 22:11:04 +0200
parents 2daf7b4c6756
children f6d560cabeee
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
1766
d17772b0fe22 copyright update
Goffi <goffi@goffi.org>
parents: 1668
diff changeset
5 # Copyright (C) 2009-2016 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
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
26 from twisted.internet import defer
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
27 from twisted.internet import reactor
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
28 from twisted.internet import protocol
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
29 from twisted.internet import endpoints
1555
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
30 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
31 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
32 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
33 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
34 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
35 import urlparse
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
36 try:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
37 import netifaces
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
38 except ImportError:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
39 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
40 netifaces = None
1534
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
41
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 PLUGIN_INFO = {
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
44 "name": "IP discovery",
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
45 "import_name": "IP",
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
46 "type": C.PLUG_TYPE_MISC,
1566
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
47 "protocols": ["XEP-0279"],
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
48 "recommendations": ["NAT-PORT"],
1534
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
49 "main": "IPPlugin",
1566
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
50 "handler": "yes",
1534
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
51 "description": _("""This plugin help to discover our external IP address.""")
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
52 }
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
53
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
54 GET_IP_PAGE = "http://www.goffi.org/sat_tools/get_ip.php" # This page must only return external IP of the requester
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
55 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
56 GET_IP_CATEGORY = "General"
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
57 GET_IP_NAME = "allow_get_ip"
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
58 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
59 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
60 A request will be done on {page}
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
61 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
62
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
63 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
64
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
65 Do you agree to do this request ?
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
66 """).format(
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
67 page = GET_IP_PAGE,
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
68 domain = urlparse.urlparse(GET_IP_PAGE).netloc,
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
69 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
70 NS_IP_CHECK = "urn:xmpp:sic:1"
1534
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
71
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
72 PARAMS = """
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
73 <params>
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
74 <general>
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
75 <category name="{category}">
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
76 <param name="{name}" label="{label}" type="bool" />
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
77 </category>
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
78 </general>
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
79 </params>
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
80 """.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
81
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
82
1534
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
83 class IPPlugin(object):
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
84 # TODO: refresh IP if a new connection is detected
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
85 # 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
86
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
87 def __init__(self, host):
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
88 log.info(_("plugin IP discovery initialization"))
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
89 self.host = host
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
90 host.memory.updateParams(PARAMS)
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
91
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
92 # NAT-Port
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
93 try:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
94 self._nat = host.plugins['NAT-PORT']
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
95 except KeyError:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
96 log.debug(u"NAT port plugin not available")
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
97 self._nat = None
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
98
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
99 # XXX: cache is kept until SàT is restarted
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
100 # 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
101 self._external_ip_cache = None
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
102 self._local_ip_cache = None
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
103
1566
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
104 def getHandler(self, profile):
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
105 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
106
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
107 def refreshIP(self):
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
108 # FIXME: use a trigger instead ?
1555
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
109 self._external_ip_cache = None
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
110 self._local_ip_cache = None
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
111
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
112 def _externalAllowed(self, profile):
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
113 """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
114
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
115 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
116 @param profile: %(doc_profile)s
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
117 @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
118 """
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
119 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
120
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
121 if allow_get_ip is None:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
122 # 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
123 def setParam(allowed):
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
124 # 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
125 # 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
126 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
127 return allowed
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
128 d = xml_tools.deferConfirm(self.host, _(GET_IP_CONFIRM), _(GET_IP_CONFIRM_TITLE), profile=profile)
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
129 d.addCallback(setParam)
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
130 return d
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
131
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
132 return defer.succeed(allow_get_ip)
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 def _filterAddresse(self, ip_addr):
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
135 """Filter acceptable addresses
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
136
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
137 For now, just remove IPv4 local addresses
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
138 @param ip_addr(str): IP addresse
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
139 @return (bool): True if addresse is acceptable
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
140 """
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
141 return not ip_addr.startswith('127.')
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 def _insertFirst(self, addresses, ip_addr):
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
144 """Insert ip_addr as first item in addresses
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
145
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
146 @param ip_addr(str): IP addresse
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
147 @param addresses(list): list of IP addresses
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
148 """
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
149 if ip_addr in addresses:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
150 if addresses[0] != ip_addr:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
151 addresses.remove(ip_addr)
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
152 addresses.insert(0, ip_addr)
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
153 else:
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
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
156 def _getIPFromExternal(self, ext_url):
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
157 """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
158
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
159 @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
160 @return (D(str)): return local IP
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
161 """
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
162 url = urlparse.urlparse(ext_url)
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
163 port = url.port
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
164 if port is None:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
165 if url.scheme=='http':
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
166 port = 80
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
167 elif url.scheme=='https':
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
168 port = 443
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
169 else:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
170 log.error(u"Unknown url scheme: {}".format(url.scheme))
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
171 defer.returnValue(None)
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
172 if url.hostname is None:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
173 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
174
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
175 point = endpoints.TCP4ClientEndpoint(reactor, url.hostname, port)
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
176 def gotConnection(p):
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
177 local_ip = p.transport.getHost().host
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
178 p.transport.loseConnection()
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
179 return local_ip
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
180
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
181 d = endpoints.connectProtocol(point, protocol.Protocol())
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
182 d.addCallback(gotConnection)
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
183 return d
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
184
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
185 @defer.inlineCallbacks
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
186 def getLocalIPs(self, profile):
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
187 """Try do discover local area network IPs
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
188
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
189 @param profile): %(doc_profile)s
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
190 @return (deferred): list of lan IP addresses
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
191 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
192 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
193 """
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
194 # 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
195 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
196 defer.returnValue(self._local_ip_cache)
1534
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
197 client = self.host.getClient(profile)
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
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
232 allow_get_ip = yield self._externalAllowed(profile)
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
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
246 def getExternalIP(self, profile):
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 @param profile: %(doc_profile)s
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
250 @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
251 """
1555
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
252 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
253 defer.returnValue(self._external_ip_cache)
1534
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
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
1668
a9e86f660653 plugin ip: fixed ip check (XEP-0279) use
Goffi <goffi@goffi.org>
parents: 1576
diff changeset
256 ip_check = yield self.host.hasFeature(NS_IP_CHECK, profile=profile)
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 client = self.host.getClient(profile)
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 = 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
261 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
262 try:
1668
a9e86f660653 plugin ip: fixed ip check (XEP-0279) use
Goffi <goffi@goffi.org>
parents: 1576
diff changeset
263 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
264 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
265 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
266 except StopIteration:
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
267 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
268 except StanzaError as e:
a9e86f660653 plugin ip: fixed ip check (XEP-0279) use
Goffi <goffi@goffi.org>
parents: 1576
diff changeset
269 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
270 else:
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
271 # 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
272 # 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
273 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
274 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
275 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
276 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
277
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
278 # then with NAT-Port
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
279 if self._nat is not None:
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
280 nat_ip = yield self._nat.getIP()
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
281 if nat_ip is not None:
1555
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
282 self._external_ip_cache = nat_ip
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
283 defer.returnValue(nat_ip)
1534
a5e0393a06cd plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff changeset
284
1566
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
285 # and finally by requesting external website
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
286 allow_get_ip = yield self._externalAllowed(profile)
1555
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
287 try:
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
288 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
289 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
290 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
291 ip = None
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
292 else:
eb8aae35085b plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents: 1537
diff changeset
293 self._external_ip_cache = ip
1537
6fa9e8c02c34 plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents: 1534
diff changeset
294 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
295
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
296
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
297 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
298 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
299
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
300 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
301 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
302
ec3848916ee8 plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents: 1555
diff changeset
303 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
304 return []