mirror of
https://github.com/YunoHost/yunohost.git
synced 2024-09-03 20:06:10 +02:00
59 lines
1.9 KiB
Python
59 lines
1.9 KiB
Python
#!/usr/bin/env python
|
|
|
|
import os
|
|
|
|
from moulinette import m18n
|
|
from moulinette.utils.network import download_text
|
|
|
|
from yunohost.diagnosis import Diagnoser
|
|
|
|
class IPDiagnoser(Diagnoser):
|
|
|
|
id_ = os.path.splitext(os.path.basename(__file__))[0].split("-")[1]
|
|
description = "internet_connectivity"
|
|
cache_duration = 60
|
|
|
|
def validate_args(self, args):
|
|
if "version" not in args.keys():
|
|
return { "versions" : [4, 6] }
|
|
else:
|
|
assert str(args["version"]) in ["4", "6"], "Invalid version, should be 4 or 6."
|
|
return { "versions" : [int(args["version"])] }
|
|
|
|
def run(self):
|
|
|
|
versions = self.args["versions"]
|
|
|
|
if 4 in versions:
|
|
ipv4 = self.get_public_ip(4)
|
|
yield dict(meta = {"version": 4},
|
|
result = ipv4,
|
|
report = ("SUCCESS", "diagnosis_network_connected_ipv4", {}) if ipv4 \
|
|
else ("ERROR", "diagnosis_network_no_ipv4", {}))
|
|
|
|
if 6 in versions:
|
|
ipv6 = self.get_public_ip(6)
|
|
yield dict(meta = {"version": 6},
|
|
result = ipv6,
|
|
report = ("SUCCESS", "diagnosis_network_connected_ipv6", {}) if ipv6 \
|
|
else ("WARNING", "diagnosis_network_no_ipv6", {}))
|
|
|
|
def get_public_ip(self, protocol=4):
|
|
|
|
if protocol == 4:
|
|
url = 'https://ip.yunohost.org'
|
|
elif protocol == 6:
|
|
url = 'https://ip6.yunohost.org'
|
|
else:
|
|
raise ValueError("invalid protocol version, it should be either 4 or 6 and was '%s'" % repr(protocol))
|
|
|
|
try:
|
|
return download_text(url, timeout=30).strip()
|
|
except Exception as e:
|
|
self.logger_debug("Could not get public IPv%s : %s" % (str(protocol), str(e)))
|
|
return None
|
|
|
|
|
|
def main(args, env, loggers):
|
|
return IPDiagnoser(args, env, loggers).diagnose()
|
|
|