diff --git a/src/dashboard.py b/src/dashboard.py index c433a47..8d0adaa 100644 --- a/src/dashboard.py +++ b/src/dashboard.py @@ -42,10 +42,22 @@ def regex_match(regex, text): pattern = re.compile(regex) return pattern.search(text) is not None -# Check IP format (IPv4 only now) -# TODO: Add IPv6 support +# Check IP format def check_IP(ip): - return regex_match("((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4}", ip) + ip_patterns = ( + r"((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4}", + r"[0-9a-fA-F]{0,4}(:([0-9a-fA-F]{0,4})){1,7}$" + ) + + for match_pattern in ip_patterns: + match_result = regex_match(match_pattern, ip) + if match_result: + result = match_result + break + else: + result = None + + return result # Clean IP def clean_IP(ip): @@ -55,11 +67,22 @@ def clean_IP(ip): def clean_IP_with_range(ip): return clean_IP(ip).split(',') -# Check IP with range (IPv4 only now) -# TODO: Add IPv6 support +# Check IP with range def check_IP_with_range(ip): - return regex_match("((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|\/)){4}(0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16|17|" + - "18|19|20|21|22|23|24|25|26|27|28|29|30|31|32)(,|$)", ip) + ip_patterns = ( + r"((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|\/)){4}([0-9]{1,2})(,|$)", + r"[0-9a-fA-F]{0,4}(:([0-9a-fA-F]{0,4})){1,7}\/([0-9]{1,3})(,|$)" + ) + + for match_pattern in ip_patterns: + match_result = regex_match(match_pattern, ip) + if match_result: + result = match_result + break + else: + result = None + + return result # Check allowed ips list def check_Allowed_IPs(ip): @@ -73,14 +96,14 @@ def check_DNS(dns): dns = dns.replace(' ','').split(',') status = True for i in dns: - if not (regex_match("((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4}", i) or regex_match("(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z][a-z]{0,61}[a-z]",i)): + if not (check_IP(i) or regex_match("(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z][a-z]{0,61}[a-z]",i)): return False return True -# Check remote endpoint (Both IPv4 address and valid hostname) -# TODO: Add IPv6 support +# Check remote endpoint def check_remote_endpoint(address): - return (regex_match("((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(\.|$)){4}", address) or regex_match("(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z][a-z]{0,61}[a-z]",address)) + + return (check_IP(address) or regex_match("(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z][a-z]{0,61}[a-z]", address)) """ @@ -1118,7 +1141,7 @@ def init_dashboard(): if 'wg_conf_path' not in config['Server']: config['Server']['wg_conf_path'] = '/etc/wireguard' if 'app_ip' not in config['Server']: - config['Server']['app_ip'] = '0.0.0.0' + config['Server']['app_ip'] = '::' if 'app_port' not in config['Server']: config['Server']['app_port'] = '10086' if 'auth_req' not in config['Server']: