# along with this program. If not, see <https://www.gnu.org/licenses/>.
import inspect
+
import validators
from fba import blacklist
blockdict = list()
rows = None
try:
+ # DEBUG: print(f"DEBUG: Fetching nodeinfo: domain='{domain}',nodeinfo_url='{nodeinfo_url}'")
rows = federation.fetch_nodeinfo(domain, nodeinfo_url)
except network.exceptions as exception:
print(f"WARNING: Exception '{type(exception)}' during fetching nodeinfo")
# Obscured domain name with no hash
row = instances.deobscure("*", blocked)
+ # DEBUG: print(f"DEBUG: row[]='{type(row)}'")
+ if row is None:
+ print(f"WARNING: Cannot deobsfucate blocked='{blocked}',domain='{domain}',origin='{origin}' - SKIPPED!")
+ continue
+
+ # DEBUG: print(f"DEBUG: blocked='{blocked}' de-obscured to '{row[0]}'")
+ blocked = row[0]
+ origin = row[1]
+ nodeinfo_url = row[2]
+ elif blocked.count("?") > 0:
+ # Obscured domain name with no hash
+ row = instances.deobscure("?", blocked)
+
# DEBUG: print(f"DEBUG: row[]='{type(row)}'")
if row is None:
print(f"WARNING: Cannot deobsfucate blocked='{blocked}',domain='{domain}',origin='{origin}' - SKIPPED!")
else:
# DEBUG: print(f"DEBUG: Updating block last seen for domain='{domain}',blocked='{blocked}' ...")
blocks.update_last_seen(domain, blocked, block_level)
+ elif "quarantined_instances" in data:
+ # DEBUG: print(f"DEBUG: Found 'quarantined_instances' in JSON response: domain='{domain}'")
+ block_level = "quarantined"
+
+ for blocked in data["quarantined_instances"]:
+ # DEBUG: print("DEBUG: BEFORE blocked:", blocked)
+ blocked = tidyup.domain(blocked)
+ # DEBUG: print("DEBUG: AFTER blocked:", blocked)
+
+ if blocked == "":
+ print("WARNING: blocked is empty after tidyup.domain():", domain, block_level)
+ continue
+ elif blacklist.is_blacklisted(blocked):
+ # DEBUG: print(f"DEBUG: blocked='{blocked}' is blacklisted - skipping!")
+ continue
+ elif blocked.count("*") > 0:
+ # Obscured domain name with no hash
+ row = instances.deobscure("*", blocked)
+
+ # DEBUG: print(f"DEBUG: row[]='{type(row)}'")
+ if row is None:
+ print(f"WARNING: Cannot deobsfucate blocked='{blocked}',domain='{domain}',origin='{origin}' - SKIPPED!")
+ continue
+
+ # DEBUG: print(f"DEBUG: blocked='{blocked}' de-obscured to '{row[0]}'")
+ blocked = row[0]
+ origin = row[1]
+ nodeinfo_url = row[2]
+ elif blocked.count("?") > 0:
+ # Obscured domain name with no hash
+ row = instances.deobscure("?", blocked)
+
+ # DEBUG: print(f"DEBUG: row[]='{type(row)}'")
+ if row is None:
+ print(f"WARNING: Cannot deobsfucate blocked='{blocked}',domain='{domain}',origin='{origin}' - SKIPPED!")
+ continue
+
+ # DEBUG: print(f"DEBUG: blocked='{blocked}' de-obscured to '{row[0]}'")
+ blocked = row[0]
+ origin = row[1]
+ nodeinfo_url = row[2]
+
+ # DEBUG: print(f"DEBUG: blocked='{blocked}'")
+ if not validators.domain(blocked):
+ print(f"WARNING: blocked='{blocked}',software='pleroma' is not a valid domain name - SKIPPED!")
+ continue
+ elif blocked.endswith(".arpa"):
+ print(f"WARNING: blocked='{blocked}' is a reversed .arpa domain and should not be used generally.")
+ continue
+ elif not instances.is_registered(blocked):
+ # Commit changes
+ fba.connection.commit()
+
+ # DEBUG: print(f"DEBUG: Domain blocked='{blocked}' wasn't found, adding ..., domain='{domain}',origin='{origin}',nodeinfo_url='{nodeinfo_url}'")
+ instances.add(blocked, domain, inspect.currentframe().f_code.co_name, nodeinfo_url)
+
+ if not blocks.is_instance_blocked(domain, blocked, block_level):
+ # DEBUG: print("DEBUG: Blocking:", domain, blocked, block_level)
+ blocks.add_instance(domain, blocked, "unknown", block_level)
+
+ if block_level == "reject":
+ # DEBUG: print("DEBUG: Adding to blockdict:", blocked)
+ blockdict.append({
+ "blocked": blocked,
+ "reason" : None
+ })
+ else:
+ # DEBUG: print(f"DEBUG: Updating block last seen for domain='{domain}',blocked='{blocked}' ...")
+ blocks.update_last_seen(domain, blocked, block_level)
+ else:
+ print(f"WARNING: Cannot find 'mrf_simple' or 'quarantined_instances' in JSON reply: domain='{domain}'")
# DEBUG: print("DEBUG: Committing changes ...")
fba.connection.commit()
# Obscured domain name with no hash
row = instances.deobscure("*", blocked)
+ # DEBUG: print(f"DEBUG: row[]='{type(row)}'")
+ if row is None:
+ print(f"WARNING: Cannot deobsfucate blocked='{blocked}',domain='{domain}',origin='{origin}' - SKIPPED!")
+ continue
+
+ # DEBUG: print(f"DEBUG: blocked='{blocked}' de-obscured to '{row[0]}'")
+ blocked = row[0]
+ origin = row[1]
+ nodeinfo_url = row[2]
+ elif blocked.count("?") > 0:
+ # Obscured domain name with no hash
+ row = instances.deobscure("?", blocked)
+
# DEBUG: print(f"DEBUG: row[]='{type(row)}'")
if row is None:
print(f"WARNING: Cannot deobsfucate blocked='{blocked}',domain='{domain}',origin='{origin}' - SKIPPED!")
print(f"WARNING: blocked='{blocked}' is a reversed .arpa domain and should not be used generally.")
continue
elif not instances.is_registered(blocked):
- # DEBUG: print(f"DEBUG: Domain blocked='{blocked}' wasn't found, adding ..., domain='{domain}',origin='{origin}',nodein
+ # DEBUG: print(f"DEBUG: Domain blocked='{blocked}' wasn't found, adding ..., domain='{domain}',origin='{origin}',nodeinfo_url='{nodeinfo_url}'")
instances.add(blocked, domain, inspect.currentframe().f_code.co_name, nodeinfo_url)
# DEBUG: print(f"DEBUG: Updating block reason: reason='{reason}',domain='{domain}',blocked='{blocked}',block_level='{block_level}'")
if entry["blocked"] == blocked:
# DEBUG: print(f"DEBUG: Updating entry reason: blocked='{blocked}',reason='{reason}'")
entry["reason"] = reason
+ elif "quarantined_instances_info" in data and "quarantined_instances" in data["quarantined_instances_info"]:
+ # DEBUG: print(f"DEBUG: Found 'quarantined_instances_info' in JSON response: domain='{domain}'")
+ block_level = "quarantined"
+
+ #print(data["quarantined_instances_info"])
+ rows = data["quarantined_instances_info"]["quarantined_instances"]
+ for blocked in rows:
+ # DEBUG: print("DEBUG: BEFORE blocked:", blocked)
+ blocked = tidyup.domain(blocked)
+ # DEBUG: print("DEBUG: AFTER blocked:", blocked)
+
+ if blocked not in rows or "reason" not in rows[blocked]:
+ print(f"WARNING: Cannot find blocked='{blocked}' in rows()={len(rows)},domain='{domain}'")
+ break
+
+ reason = rows[blocked]["reason"]
+ # DEBUG: print(f"DEBUG: reason='{reason}'")
+
+ if blocked == "":
+ print("WARNING: blocked is empty after tidyup.domain():", domain, block_level)
+ continue
+ elif blacklist.is_blacklisted(blocked):
+ # DEBUG: print(f"DEBUG: blocked='{blocked}' is blacklisted - skipping!")
+ continue
+ elif blocked.count("*") > 0:
+ # Obscured domain name with no hash
+ row = instances.deobscure("*", blocked)
+
+ # DEBUG: print(f"DEBUG: row[]='{type(row)}'")
+ if row is None:
+ print(f"WARNING: Cannot deobsfucate blocked='{blocked}',domain='{domain}',origin='{origin}' - SKIPPED!")
+ continue
+
+ # DEBUG: print(f"DEBUG: blocked='{blocked}' de-obscured to '{row[0]}'")
+ blocked = row[0]
+ origin = row[1]
+ nodeinfo_url = row[2]
+ elif blocked.count("?") > 0:
+ # Obscured domain name with no hash
+ row = instances.deobscure("?", blocked)
+
+ # DEBUG: print(f"DEBUG: row[]='{type(row)}'")
+ if row is None:
+ print(f"WARNING: Cannot deobsfucate blocked='{blocked}',domain='{domain}',origin='{origin}' - SKIPPED!")
+ continue
+
+ # DEBUG: print(f"DEBUG: blocked='{blocked}' de-obscured to '{row[0]}'")
+ blocked = row[0]
+ origin = row[1]
+ nodeinfo_url = row[2]
+
+ # DEBUG: print(f"DEBUG: blocked='{blocked}'")
+ if not validators.domain(blocked):
+ print(f"WARNING: blocked='{blocked}',software='pleroma' is not a valid domain name - SKIPPED!")
+ continue
+ elif blocked.endswith(".arpa"):
+ print(f"WARNING: blocked='{blocked}' is a reversed .arpa domain and should not be used generally.")
+ continue
+ elif not instances.is_registered(blocked):
+ # DEBUG: print(f"DEBUG: Domain blocked='{blocked}' wasn't found, adding ..., domain='{domain}',origin='{origin}',nodeinfo_url='{nodeinfo_url}'")
+ instances.add(blocked, domain, inspect.currentframe().f_code.co_name, nodeinfo_url)
+
+ # DEBUG: print(f"DEBUG: Updating block reason: reason='{reason}',domain='{domain}',blocked='{blocked}',block_level='{block_level}'")
+ blocks.update_reason(reason, domain, blocked, block_level)
+
+ # DEBUG: print(f"DEBUG: blockdict()={len(blockdict)}")
+ for entry in blockdict:
+ if entry["blocked"] == blocked:
+ # DEBUG: print(f"DEBUG: Updating entry reason: blocked='{blocked}',reason='{reason}'")
+ entry["reason"] = reason
+ else:
+ print(f"WARNING: Cannot find 'mrf_simple_info' or 'quarantined_instances_info' in JSON reply: domain='{domain}'")
fba.connection.commit()
# DEBUG: print("DEBUG: EXIT!")