import bs4
import requests
-import validators
-from fba.helpers import blacklist
from fba.helpers import config
from fba.helpers import domain as domain_helper
from fba.helpers import tidyup
def fetch_url(url: str, headers: dict, timeout: tuple) -> requests.models.Response:
logger.debug("url='%s',headers()=%d,timeout(%d)='%s' - CALLED!", url, len(headers), len(timeout), timeout)
+
if not isinstance(url, str):
raise ValueError(f"Parameter url[]='{type(url)}' is not of type 'str'")
elif url == "":
# Invoke other function, avoid trailing ?
logger.debug("components[%s]='%s'", type(components), components)
if components.query != "":
- response = network.fetch_response(components.netloc, f"{components.path}?{components.query}", headers, timeout)
+ response = network.fetch_response(components.netloc.split(":")[0], f"{components.path}?{components.query}", headers, timeout)
else:
- response = network.fetch_response(components.netloc, components.path if isinstance(components.path, str) and components.path != '' else '/', headers, timeout)
+ response = network.fetch_response(components.netloc.split(":")[0], components.path if isinstance(components.path, str) and components.path != '' else '/', headers, timeout)
logger.debug("response[]='%s' - EXIT!", type(response))
return response
def find_domains(tags: bs4.element.ResultSet, search: str) -> list:
logger.debug("tags[%s]()=%d,search='%s' - CALLED!", type(tags), len(tags), search)
+
if not isinstance(tags, bs4.element.ResultSet):
raise ValueError(f"Parameter tags[]='{type(tags)}' is not of type 'ResultSet'")
elif not isinstance(search, str):
domain = domain.encode("idna").decode("utf-8")
logger.debug("domain='%s' - AFTER!", domain)
- if not is_domain_wanted(domain):
+ if not domain_helper.is_wanted(domain):
logger.debug("domain='%s' is not wanted - SKIPPED!", domain)
continue
logger.debug("domains()=%d - EXIT!", len(domains))
return domains
-def is_domain_wanted(domain: str) -> bool:
- logger.debug("domain='%s' - CALLED!", domain)
-
- wanted = True
- if not isinstance(domain, str):
- raise ValueError(f"Parameter domain[]='{type(domain)}' is not of type 'str'")
- elif domain == "":
- raise ValueError("Parameter 'domain' is empty")
- elif domain.lower() != domain:
- wanted = False
- elif not validators.domain(domain.split("/")[0]):
- logger.debug("domain='%s' is not a valid domain name - settings False ...", domain)
- wanted = False
- elif domain.endswith(".arpa"):
- logger.debug("domain='%s' is a domain for reversed IP addresses - settings False ...", domain)
- wanted = False
- elif domain.endswith(".onion"):
- logger.debug("domain='%s' is a TOR .onion domain - settings False ...", domain)
- wanted = False
- elif domain.endswith(".tld"):
- logger.debug("domain='%s' is a fake domain - settings False ...", domain)
- wanted = False
- elif blacklist.is_blacklisted(domain):
- logger.debug("domain='%s' is blacklisted - settings False ...", domain)
- wanted = False
- elif domain.find("/profile/") > 0 or domain.find("/users/") > 0 or (instances.is_registered(domain.split("/")[0]) and domain.find("/c/") > 0):
- logger.debug("domain='%s' is a single user", domain)
- wanted = False
- elif domain.find("/tag/") > 0:
- logger.debug("domain='%s' is a tag", domain)
- wanted = False
-
- logger.debug("wanted='%s' - EXIT!", wanted)
- return wanted
-
def deobfuscate(domain: str, blocker: str, domain_hash: str = None) -> str:
logger.debug("domain='%s',blocker='%s',domain_hash='%s' - CALLED!", domain, blocker, domain_hash)
domain_helper.raise_on(blocker)
elif not isinstance(domain_hash, str) and domain_hash is not None:
raise ValueError(f"Parameter domain_hash[]='{type(domain_hash)}' is not of type 'str'")
+ logger.debug("Setting has_obfuscation=False for blocker='%s' ...", blocker)
+ instances.set_has_obfuscation(blocker, False)
+
if domain.find("*") >= 0:
logger.debug("blocker='%s' uses obfuscated domains", blocker)
+ instances.set_has_obfuscation(blocker, True)
# Obscured domain name with no hash
row = instances.deobfuscate("*", domain, domain_hash)
domain = row["domain"]
else:
logger.warning("blocker='%s' has domain='%s' that cannot be deobfuscated.", blocker, domain)
- instances.set_has_obfuscation(blocker, True)
elif domain.find("?") >= 0:
logger.debug("blocker='%s' uses obfuscated domains", blocker)
+ instances.set_has_obfuscation(blocker, True)
# Obscured domain name with no hash
row = instances.deobfuscate("?", domain, domain_hash)
domain = row["domain"]
else:
logger.warning("blocker='%s' has domain='%s' that cannot be deobfuscated.", blocker, domain)
- instances.set_has_obfuscation(blocker, True)
else:
logger.debug("domain='%s' is not obfuscated", domain)