import re def IsOnionValid(url: str)-> bool: """ Checks if the domain(param) is a valid onion domain and return True else False. """ try: pattern = re.compile(r"^[A-Za-z0-9:/._%-=#?&@]+(.onion)$") url_pattern = re.compile(r"^(\w+:)?(?://)?(\w+\.)?[a-z2-7]{56}\.onion") url = url.strip().removesuffix('/') if url.startswith('http://'): domain = url.split('/')[2] if pattern.fullmatch(domain) is not None: if len(domain.split('.')) > 3: return False else: if len(domain) < 62: return False return True elif pattern.fullmatch(domain) is None: return False else: return False else: #TODO : edit the url to make sure it has http:// at the beginning, in case if it's missing? (problem is that it only returns true or false) if url_pattern.match(url) is not None: if len(url.split('.')) > 3: return False else: if len(url) < 62: return False return True elif url_pattern.match(url) is None: return False else: return False except Exception as e: return False def IsUrlValid(url:str)->bool: """ Check if url is valid both dark net end clearnet. """ pattern = re.compile(r"^[A-Za-z0-9:/._%-=#?&@]+$") onion_pattern = re.compile(r"^(\w+:)?(?://)?(\w+\.)?[a-z2-7]{56}\.onion") url = str(url) if len(url) < 4: return False if onion_pattern.match(url) is not None: return IsOnionValid(url) else: if not url.__contains__('.'): return False if pattern.fullmatch(url) is None: return False return True