Mercurial > libervia-backend
annotate libervia/backend/plugins/plugin_misc_ip.py @ 4180:b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
An https:/salut-a-toi.org URL was used to retrieve external IP, but it's not valid
anymore, resulting in an exception. This feature is currently disabled.
Also moved several methods from legacy inline callbacks to coroutines.
author | Goffi <goffi@goffi.org> |
---|---|
date | Sat, 09 Dec 2023 14:30:54 +0100 |
parents | 4b842c1fb686 |
children | 0d7bb4df2343 |
rev | line source |
---|---|
3028 | 1 #!/usr/bin/env python3 |
3137 | 2 |
1534
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 |
3479 | 5 # Copyright (C) 2009-2021 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 |
3028 | 20 import urllib.parse |
4071
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
21 from libervia.backend.core.i18n import _, D_ |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
22 from libervia.backend.core.constants import Const as C |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
23 from libervia.backend.core.log import getLogger |
4b842c1fb686
refactoring: renamed `sat` package to `libervia.backend`
Goffi <goffi@goffi.org>
parents:
4037
diff
changeset
|
24 from libervia.backend.tools import xml_tools |
3028 | 25 from wokkel import disco, iwokkel |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
26 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
|
27 from twisted.web import error as web_error |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
28 from twisted.internet import defer |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
29 from twisted.internet import reactor |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
30 from twisted.internet import protocol |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
31 from twisted.internet import endpoints |
1555
eb8aae35085b
plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents:
1537
diff
changeset
|
32 from twisted.internet import error as internet_error |
3028 | 33 from zope.interface import implementer |
1566
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 |
3028 | 36 |
37 log = getLogger(__name__) | |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
38 |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
39 try: |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
40 import netifaces |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
41 except ImportError: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
42 log.warning( |
3028 | 43 "netifaces is not available, it help discovering IPs, you can install it on https://pypi.python.org/pypi/netifaces" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
44 ) |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
45 netifaces = None |
1534
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
46 |
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
47 |
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
48 PLUGIN_INFO = { |
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_NAME: "IP discovery", |
33c8c4973743
core (plugins): added missing contants + use of new constants in PLUGIN_INFO
Goffi <goffi@goffi.org>
parents:
2144
diff
changeset
|
50 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
|
51 C.PI_TYPE: C.PLUG_TYPE_MISC, |
2504
67cc54b01a12
plugin file sharing component: first draft:
Goffi <goffi@goffi.org>
parents:
2489
diff
changeset
|
52 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
|
53 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
|
54 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
|
55 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
|
56 C.PI_HANDLER: "yes", |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
57 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
|
58 } |
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
59 |
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
|
60 # TODO: GET_IP_PAGE should be configurable in sat.conf |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
61 GET_IP_PAGE = ( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
62 "http://salut-a-toi.org/whereami/" |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
63 ) # This page must only return external IP of the requester |
3028 | 64 GET_IP_LABEL = D_("Allow external get IP") |
1534
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
65 GET_IP_CATEGORY = "General" |
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
66 GET_IP_NAME = "allow_get_ip" |
3028 | 67 GET_IP_CONFIRM_TITLE = D_("Confirm external site request") |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
68 GET_IP_CONFIRM = D_( |
3028 | 69 """To facilitate data transfer, we need to contact a website. |
1534
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
70 A request will be done on {page} |
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
71 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
|
72 |
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
73 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
|
74 |
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
75 Do you agree to do this request ? |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
76 """ |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
77 ).format( |
3028 | 78 page=GET_IP_PAGE, domain=urllib.parse.urlparse(GET_IP_PAGE).netloc, app_name=C.APP_NAME |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
79 ) |
1566
ec3848916ee8
plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents:
1555
diff
changeset
|
80 NS_IP_CHECK = "urn:xmpp:sic:1" |
1534
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
81 |
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 <params> |
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
84 <general> |
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
85 <category name="{category}"> |
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
86 <param name="{name}" label="{label}" type="bool" /> |
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
87 </category> |
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
88 </general> |
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
89 </params> |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
90 """.format( |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
91 category=GET_IP_CATEGORY, name=GET_IP_NAME, label=GET_IP_LABEL |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
92 ) |
1534
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
93 |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
94 |
1534
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
95 class IPPlugin(object): |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
96 # TODO: refresh IP if a new connection is detected |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
97 # 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
|
98 |
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
99 def __init__(self, host): |
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
100 log.info(_("plugin IP discovery initialization")) |
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
101 self.host = host |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
102 host.memory.update_params(PARAMS) |
1534
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
103 |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
104 # NAT-Port |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
105 try: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
106 self._nat = host.plugins["NAT-PORT"] |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
107 except KeyError: |
3028 | 108 log.debug("NAT port plugin not available") |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
109 self._nat = None |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
110 |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
111 # XXX: cache is kept until SàT is restarted |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
112 # if IP may have changed, use self.refresh_ip |
1555
eb8aae35085b
plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents:
1537
diff
changeset
|
113 self._external_ip_cache = None |
eb8aae35085b
plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents:
1537
diff
changeset
|
114 self._local_ip_cache = None |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
115 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
116 def get_handler(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
|
117 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
|
118 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
119 def refresh_ip(self): |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
120 # FIXME: use a trigger instead ? |
1555
eb8aae35085b
plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents:
1537
diff
changeset
|
121 self._external_ip_cache = None |
eb8aae35085b
plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents:
1537
diff
changeset
|
122 self._local_ip_cache = None |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
123 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
124 def _external_allowed(self, client): |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
125 """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
|
126 |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
127 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
|
128 @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
|
129 """ |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
130 allow_get_ip = self.host.memory.params.param_get_a( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
131 GET_IP_NAME, GET_IP_CATEGORY, use_default=False |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
132 ) |
1537
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 if allow_get_ip is None: |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
135 # we don't have autorisation from user yet to use get_ip, we ask him |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
136 def param_set(allowed): |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
137 # FIXME: we need to use bool_const as param_set only manage str/unicode |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
138 # need to be fixed when params will be refactored |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
139 self.host.memory.param_set( |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
140 GET_IP_NAME, C.bool_const(allowed), GET_IP_CATEGORY |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
141 ) |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
142 return allowed |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
143 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
144 d = xml_tools.defer_confirm( |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
145 self.host, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
146 _(GET_IP_CONFIRM), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
147 _(GET_IP_CONFIRM_TITLE), |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
148 profile=client.profile, |
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
149 ) |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
150 d.addCallback(param_set) |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
151 return d |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
152 |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
153 return defer.succeed(allow_get_ip) |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
154 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
155 def _filter_addresse(self, ip_addr): |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
156 """Filter acceptable addresses |
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 For now, just remove IPv4 local addresses |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
159 @param ip_addr(str): IP addresse |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
160 @return (bool): True if addresse is acceptable |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
161 """ |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
162 return not ip_addr.startswith("127.") |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
163 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
164 def _insert_first(self, addresses, ip_addr): |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
165 """Insert ip_addr as first item in addresses |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
166 |
3132
b64dd7c1496d
plugin ip: fixed IP detection with external website
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
167 @param addresses(list): list of IP addresses |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
168 @param ip_addr(str): IP addresse |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
169 """ |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
170 if ip_addr in addresses: |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
171 if addresses[0] != ip_addr: |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
172 addresses.remove(ip_addr) |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
173 addresses.insert(0, ip_addr) |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
174 else: |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
175 addresses.insert(0, ip_addr) |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
176 |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
177 async def _get_ip_from_external(self, ext_url): |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
178 """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
|
179 |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
180 @param ext_utl(str): url to connect to |
3132
b64dd7c1496d
plugin ip: fixed IP detection with external website
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
181 @return (str, None): return local IP, or None if it's not possible |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
182 """ |
3028 | 183 url = urllib.parse.urlparse(ext_url) |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
184 port = url.port |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
185 if port is None: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
186 if url.scheme == "http": |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
187 port = 80 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
188 elif url.scheme == "https": |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
189 port = 443 |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
190 else: |
3028 | 191 log.error("Unknown url scheme: {}".format(url.scheme)) |
3132
b64dd7c1496d
plugin ip: fixed IP detection with external website
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
192 return None |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
193 if url.hostname is None: |
3028 | 194 log.error("Can't find url hostname for {}".format(GET_IP_PAGE)) |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
195 |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
196 point = endpoints.TCP4ClientEndpoint(reactor, url.hostname, port) |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
197 |
3132
b64dd7c1496d
plugin ip: fixed IP detection with external website
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
198 p = await endpoints.connectProtocol(point, protocol.Protocol()) |
b64dd7c1496d
plugin ip: fixed IP detection with external website
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
199 local_ip = p.transport.getHost().host |
b64dd7c1496d
plugin ip: fixed IP detection with external website
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
200 p.transport.loseConnection() |
b64dd7c1496d
plugin ip: fixed IP detection with external website
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
201 return local_ip |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
202 |
4180
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
203 async def get_local_ips(self, client): |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
204 """Try do discover local area network IPs |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
205 |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
206 @return (deferred): list of lan IP addresses |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
207 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
|
208 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
|
209 """ |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
210 # 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
|
211 if self._local_ip_cache is not None: |
4180
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
212 return self._local_ip_cache |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
213 addresses = [] |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
214 localhost = ["127.0.0.1"] |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
215 |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
216 # we first try our luck with netifaces |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
217 if netifaces is not None: |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
218 addresses = [] |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
219 for interface in netifaces.interfaces(): |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
220 if_addresses = netifaces.ifaddresses(interface) |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
221 try: |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
222 inet_list = if_addresses[netifaces.AF_INET] |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
223 except KeyError: |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
224 continue |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
225 for data in inet_list: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
226 addresse = data["addr"] |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
227 if self._filter_addresse(addresse): |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
228 addresses.append(addresse) |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
229 |
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
|
230 # then we use our connection to server |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
231 ip = client.xmlstream.transport.getHost().host |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
232 if self._filter_addresse(ip): |
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
233 self._insert_first(addresses, ip) |
4180
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
234 return addresses |
1534
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
235 |
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
|
236 # 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
|
237 if self._nat is not None: |
4180
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
238 nat_ip = await self._nat.get_ip(local=True) |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
239 if nat_ip is not None: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
240 self._insert_first(addresses, nat_ip) |
4180
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
241 return addresses |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
242 |
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
243 if addresses: |
4180
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
244 return addresses |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
245 |
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
|
246 # still not luck, we need to contact external website |
4180
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
247 allow_get_ip = await self._external_allowed(client) |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
248 |
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
|
249 if not allow_get_ip: |
4180
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
250 return addresses or localhost |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
251 |
1555
eb8aae35085b
plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents:
1537
diff
changeset
|
252 try: |
4180
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
253 local_ip = await defer.ensureDeferred(self._get_ip_from_external(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
|
254 except (internet_error.DNSLookupError, internet_error.TimeoutError): |
3028 | 255 log.warning("Can't access Domain Name System") |
3132
b64dd7c1496d
plugin ip: fixed IP detection with external website
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
256 else: |
b64dd7c1496d
plugin ip: fixed IP detection with external website
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
257 if local_ip is not None: |
4037
524856bd7b19
massive refactoring to switch from camelCase to snake_case:
Goffi <goffi@goffi.org>
parents:
3479
diff
changeset
|
258 self._insert_first(addresses, local_ip) |
3132
b64dd7c1496d
plugin ip: fixed IP detection with external website
Goffi <goffi@goffi.org>
parents:
3028
diff
changeset
|
259 |
4180
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
260 return addresses or localhost |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
261 |
4180
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
262 async def get_external_ip(self, client): |
1534
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
263 """Try to discover external IP |
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
264 |
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
265 @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
|
266 """ |
1555
eb8aae35085b
plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents:
1537
diff
changeset
|
267 if self._external_ip_cache is not None: |
4180
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
268 return self._external_ip_cache |
1534
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
269 |
1566
ec3848916ee8
plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents:
1555
diff
changeset
|
270 # we first try with XEP-0279 |
4180
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
271 ip_check = await 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
|
272 if ip_check: |
3028 | 273 log.debug("Server IP Check available, we use it to retrieve our IP") |
1566
ec3848916ee8
plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents:
1555
diff
changeset
|
274 iq_elt = client.IQ("get") |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
275 iq_elt.addElement((NS_IP_CHECK, "address")) |
1566
ec3848916ee8
plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents:
1555
diff
changeset
|
276 try: |
4180
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
277 result_elt = await iq_elt.send() |
3028 | 278 address_elt = next(result_elt.elements(NS_IP_CHECK, "address")) |
279 ip_elt = next(address_elt.elements(NS_IP_CHECK, "ip")) | |
1566
ec3848916ee8
plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents:
1555
diff
changeset
|
280 except StopIteration: |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
281 log.warning( |
3028 | 282 "Server returned invalid result on XEP-0279 request, we ignore it" |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
283 ) |
1668
a9e86f660653
plugin ip: fixed ip check (XEP-0279) use
Goffi <goffi@goffi.org>
parents:
1576
diff
changeset
|
284 except StanzaError as e: |
3028 | 285 log.warning("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
|
286 else: |
ec3848916ee8
plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents:
1555
diff
changeset
|
287 # 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
|
288 # 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
|
289 external_ip = str(ip_elt) |
3028 | 290 log.debug("External IP found: {}".format(external_ip)) |
1566
ec3848916ee8
plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents:
1555
diff
changeset
|
291 self._external_ip_cache = external_ip |
4180
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
292 return self._external_ip_cache |
1566
ec3848916ee8
plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents:
1555
diff
changeset
|
293 |
ec3848916ee8
plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents:
1555
diff
changeset
|
294 # then with NAT-Port |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
295 if self._nat is not None: |
4180
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
296 nat_ip = await self._nat.get_ip() |
1537
6fa9e8c02c34
plugin IP discovery: better IP discovering:
Goffi <goffi@goffi.org>
parents:
1534
diff
changeset
|
297 if nat_ip is not None: |
1555
eb8aae35085b
plugin ip: local ip cache + DNS error detection
Goffi <goffi@goffi.org>
parents:
1537
diff
changeset
|
298 self._external_ip_cache = nat_ip |
4180
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
299 return nat_ip |
1534
a5e0393a06cd
plugin ip, params: plugin IP discovery, first draft:
Goffi <goffi@goffi.org>
parents:
diff
changeset
|
300 |
1566
ec3848916ee8
plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents:
1555
diff
changeset
|
301 # and finally by requesting external website |
4180
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
302 allow_get_ip = await self._external_allowed(client) |
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
303 |
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
304 ip = None |
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
305 |
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
306 # FIXME: following code is deprecated, check it |
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
307 # try: |
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
308 # ip = ((await webclient.getPage(GET_IP_PAGE.encode('utf-8'))) |
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
309 # if allow_get_ip else None) |
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
310 # except (internet_error.DNSLookupError, internet_error.TimeoutError): |
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
311 # log.warning("Can't access Domain Name System") |
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
312 # ip = None |
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
313 # except web_error.Error as e: |
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
314 # log.warning( |
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
315 # "Error while retrieving IP on {url}: {message}".format( |
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
316 # url=GET_IP_PAGE, message=e |
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
317 # ) |
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
318 # ) |
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
319 # ip = None |
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
320 # else: |
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
321 # self._external_ip_cache = ip |
b86912d3fd33
plugin IP: fix use of legacy URL + coroutine use:
Goffi <goffi@goffi.org>
parents:
4071
diff
changeset
|
322 return ip |
1566
ec3848916ee8
plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents:
1555
diff
changeset
|
323 |
ec3848916ee8
plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents:
1555
diff
changeset
|
324 |
3028 | 325 @implementer(iwokkel.IDisco) |
1566
ec3848916ee8
plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents:
1555
diff
changeset
|
326 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
|
327 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
328 def getDiscoInfo(self, requestor, target, nodeIdentifier=""): |
1566
ec3848916ee8
plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents:
1555
diff
changeset
|
329 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
|
330 |
2624
56f94936df1e
code style reformatting using black
Goffi <goffi@goffi.org>
parents:
2562
diff
changeset
|
331 def getDiscoItems(self, requestor, target, nodeIdentifier=""): |
1566
ec3848916ee8
plugin ip: implemented XEP-0279 for external ip retrieval + fixed bad exception handling
Goffi <goffi@goffi.org>
parents:
1555
diff
changeset
|
332 return [] |