Bump python-ovos-utils and network check PR

This commit is contained in:
j1nx 2022-12-13 14:42:14 +01:00
parent dcb587fee5
commit b966787ded
3 changed files with 166 additions and 2 deletions

View File

@ -0,0 +1,164 @@
From 99594333cb51091f27013cb4cf8b5b5c3177c4aa Mon Sep 17 00:00:00 2001
From: jarbasai <jarbasai@mailfence.com>
Date: Sat, 10 Dec 2022 15:52:32 +0000
Subject: [PATCH 1/2] improve network checks
---
ovos_utils/network_utils.py | 71 ++++++++++++++++++++++++++++++++++---
1 file changed, 66 insertions(+), 5 deletions(-)
diff --git a/ovos_utils/network_utils.py b/ovos_utils/network_utils.py
index c7d21c2..4d75e2f 100644
--- a/ovos_utils/network_utils.py
+++ b/ovos_utils/network_utils.py
@@ -1,6 +1,25 @@
import socket
+
import requests
+from ovos_utils.log import LOG
+
+
+def get_network_tests_config():
+ """Get network_tests object from mycroft.configuration."""
+ from ovos_config import Configuration
+ config = Configuration()
+ return config.get(
+ "network_tests",
+ {
+ "ip_url": 'https://api.ipify.org',
+ "dns_primary": "1.1.1.1",
+ "dns_secondary": "8.8.8.8",
+ "web_url": "https://nmcheck.gnome.org/check_network_status.txt",
+ "web_url_secondary": "https://checkonline.home-assistant.io/online.txt"
+ }
+ )
+
def get_ip():
# taken from https://stackoverflow.com/a/28950776/13703283
@@ -17,27 +36,69 @@ def get_ip():
def get_external_ip():
- return requests.get('https://api.ipify.org').text
+ cfg = get_network_tests_config()
+ return requests.get(cfg["ip_url"]).text
-def is_connected_dns(host="1.1.1.1"):
+def is_connected_dns(host=None, port=53, timeout=3):
+ """Check internet connection by connecting to DNS servers
+ Returns:
+ True if internet connection can be detected
+ """
+
+ if host is None:
+ cfg = get_network_tests_config()
+ return is_connected_dns(cfg["dns_primary"]) or \
+ is_connected_dns(cfg["dns_secondary"])
+
try:
# connect to the host -- tells us if the host is actually reachable
- socket.create_connection((host, 53))
+ s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+ s.settimeout(timeout)
+ s.connect((host, port))
return True
except OSError:
pass
return False
-def is_connected_http(host="http://duckduckgo.com"):
+def is_connected_http(host=None):
+ """Check internet connection by connecting to some website
+ Returns:
+ True if connection attempt succeeded
+ """
+ if host is None:
+ cfg = get_network_tests_config()
+ return is_connected_http(cfg["web_url"]) or \
+ is_connected_http(cfg["web_url_secondary"])
+
try:
status = requests.head(host).status_code
return True
- except OSError:
+ except:
pass
return False
def is_connected():
return any((is_connected_dns(), is_connected_http()))
+
+
+def check_captive_portal(url="http://start.mycroft.ai/portal-check.html",
+ expected_text="<title>Portal Check</title>") -> bool:
+ """Returns True if a captive portal page is detected"""
+ captive_portal = False
+
+ try:
+ # We need to check a site that doesn't use HTTPS
+ html_doc = requests.get(url).text
+
+ # If something different is in the html, we likely were redirected
+ # to the portal page.
+ if expected_text not in html_doc:
+ captive_portal = True
+ except Exception:
+ LOG.exception("Error checking for captive portal")
+
+ return captive_portal
+
From a9ccc2d015752959c67a5be29053bd3097380cff Mon Sep 17 00:00:00 2001
From: jarbasai <jarbasai@mailfence.com>
Date: Sat, 10 Dec 2022 16:25:48 +0000
Subject: [PATCH 2/2] portal check
---
ovos_utils/network_utils.py | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
diff --git a/ovos_utils/network_utils.py b/ovos_utils/network_utils.py
index 4d75e2f..d980103 100644
--- a/ovos_utils/network_utils.py
+++ b/ovos_utils/network_utils.py
@@ -15,8 +15,10 @@ def get_network_tests_config():
"ip_url": 'https://api.ipify.org',
"dns_primary": "1.1.1.1",
"dns_secondary": "8.8.8.8",
- "web_url": "https://nmcheck.gnome.org/check_network_status.txt",
- "web_url_secondary": "https://checkonline.home-assistant.io/online.txt"
+ "web_url": "http://nmcheck.gnome.org/check_network_status.txt",
+ "web_url_secondary": "https://checkonline.home-assistant.io/online.txt",
+ "captive_portal_url": "http://nmcheck.gnome.org/check_network_status.txt",
+ "captive_portal_text": "NetworkManager is online"
}
)
@@ -84,15 +86,18 @@ def is_connected():
return any((is_connected_dns(), is_connected_http()))
-def check_captive_portal(url="http://start.mycroft.ai/portal-check.html",
- expected_text="<title>Portal Check</title>") -> bool:
+def check_captive_portal(host=None, expected_text=None) -> bool:
"""Returns True if a captive portal page is detected"""
captive_portal = False
+ if not host or not expected_text:
+ cfg = get_network_tests_config()
+ host = host or cfg["captive_portal_url"]
+ expected_text = expected_text or cfg["captive_portal_url_text"]
+
try:
# We need to check a site that doesn't use HTTPS
- html_doc = requests.get(url).text
-
+ html_doc = requests.get(host).text
# If something different is in the html, we likely were redirected
# to the portal page.
if expected_text not in html_doc:

View File

@ -1 +1 @@
sha256 295030c6f4ac38cd1a0cb8c7653a72ef1e23a2f1079d9315619a106c2aef8559 python-ovos-utils-8bab80d7e3e1f0bcf630934a14ce05b6befb2eb3.tar.gz
sha256 14783e19e3159df3d9fb12e65624cea9a03422bfd0abff18a1e574fdad3a468a python-ovos-utils-8e0c4b762bc5b44c9f96ed6397cb996d53a7d598.tar.gz

View File

@ -4,7 +4,7 @@
#
################################################################################
PYTHON_OVOS_UTILS_VERSION = 8bab80d7e3e1f0bcf630934a14ce05b6befb2eb3
PYTHON_OVOS_UTILS_VERSION = 8e0c4b762bc5b44c9f96ed6397cb996d53a7d598
PYTHON_OVOS_UTILS_SITE = $(call github,OpenVoiceOS,ovos_utils,$(PYTHON_OVOS_UTILS_VERSION))
PYTHON_OVOS_UTILS_SETUP_TYPE = setuptools
PYTHON_OVOS_UTILS_LICENSE_FILES = LICENSE