2 from hashlib import sha256
7 with open("config.json") as f:
8 config = json.loads(f.read())
13 "activitypub-troll.cf",
16 "social.shrimpcam.pw",
21 "user-agent": config["useragent"]
24 def get_hash(domain: str) -> str:
25 return sha256(domain.encode("utf-8")).hexdigest()
27 def get_peers(domain: str) -> str:
29 res = get(f"https://{domain}/api/v1/instance/peers", headers=headers, timeout=5)
32 print("WARNING: Cannot fetch peers:", domain)
35 peerlist = get_peers(domain)
37 if (peerlist is None):
38 print("FATAL: CANNOT FETCH PEERS:", domain)
41 def get_type(instdomain: str) -> str:
43 res = get(f"https://{instdomain}/nodeinfo/2.1.json", headers=headers, timeout=5)
44 if res.status_code == 404:
45 res = get(f"https://{instdomain}/nodeinfo/2.0", headers=headers, timeout=5)
46 if res.status_code == 404:
47 res = get(f"https://{instdomain}/nodeinfo/2.0.json", headers=headers, timeout=5)
48 if res.ok and "text/html" in res.headers["content-type"]:
49 res = get(f"https://{instdomain}/nodeinfo/2.1", headers=headers, timeout=5)
51 if res.json()["software"]["name"] in ["akkoma", "rebased"]:
53 elif res.json()["software"]["name"] in ["hometown", "ecko"]:
55 elif res.json()["software"]["name"] in ["calckey", "groundpolis", "foundkey", "cherrypick"]:
58 return res.json()["software"]["name"]
59 elif res.status_code == 404:
60 res = get(f"https://{instdomain}/api/v1/instance", headers=headers, timeout=5)
67 conn = sqlite3.connect("blocks.db")
71 "SELECT domain FROM instances WHERE 1"
74 for instance in peerlist:
75 instance = instance.lower()
78 for domain in blacklist:
79 if domain in instance:
88 "SELECT domain FROM instances WHERE domain = ?", (instance,)
90 if c.fetchone() == None:
92 "INSERT INTO instances SELECT ?, ?, ?",
93 (instance, get_hash(instance), get_type(instance)),
96 except Exception as e:
97 print("error:", e, instance)