]> git.mxchange.org Git - fba.git/commitdiff
fetch from instances from database instead of text files
authorEnju Aihara <9839590-EnjuAihara@users.noreply.gitlab.com>
Mon, 21 Mar 2022 13:04:44 +0000 (14:04 +0100)
committerEnju Aihara <9839590-EnjuAihara@users.noreply.gitlab.com>
Mon, 21 Mar 2022 13:04:44 +0000 (14:04 +0100)
fetch_blocks.py

index aa30b8f93853a829ef33fdf57d7a51161f143ec9..0490209f19e56d44ddf17881ed3d642d69474e70 100644 (file)
@@ -3,13 +3,30 @@ from json import loads
 from hashlib import sha256
 import sqlite3
 
+def get_type(domain):
+    try:
+        res = get("https://"+domain, timeout=5)
+        if "pleroma" in res.text.lower():
+            print("pleroma")
+            return "pleroma"
+        elif "mastodon" in res.text.lower():
+            print("mastodon")
+            return "mastodon"
+        return ""
+    except Exception as e:
+        print("error:", e, domain)
+        return ""
+
 conn = sqlite3.connect("blocks.db")
 c = conn.cursor()
 
-with open("pleroma_instances.txt", "r") as f:
-    while blocker := f.readline().strip():
+c.execute("select domain, software from instances where software in ('pleroma', 'mastodon')")
+for instance in c.fetchall():
+    if instance[1] == "pleroma":
+        blocker = instance[0]
         print(blocker)
         try:
+            # Blocks
             c.execute("delete from blocks where blocker = ?", (blocker,))
             json = loads(get(f"https://{blocker}/nodeinfo/2.1.json").text)
             for mrf in json["metadata"]["federation"]["mrf_simple"]:
@@ -18,27 +35,28 @@ with open("pleroma_instances.txt", "r") as f:
                         continue
                     c.execute("select case when ? in (select domain from instances) then 1 else 0 end", (blocked,))
                     if c.fetchone() == (0,):
-                        c.execute("insert into instances select ?, ?", (blocked, sha256(bytes(blocked, "utf-8")).hexdigest()))
+                        c.execute("insert into instances select ?, ?, ?", (blocked, sha256(bytes(blocked, "utf-8")).hexdigest(), get_type(blocked)))
                     c.execute("insert into blocks select ?, ?, '', ?", (blocker, blocked, mrf))
+            # Quarantined Instances
             for blocked in json["metadata"]["federation"]["quarantined_instances"]:
                 if blocked == "":
                     continue
                 c.execute("select case when ? in (select domain from instances) then 1 else 0 end", (blocked,))
                 if c.fetchone() == (0,):
-                    c.execute("insert into instances select ?, ?", (blocked, sha256(bytes(blocked, "utf-8")).hexdigest()))
+                    c.execute("insert into instances select ?, ?, ?", (blocked, sha256(bytes(blocked, "utf-8")).hexdigest(), get_type(blocked)))
                 c.execute("insert into blocks select ?, ?, '', 'quarantined_instances'", (blocker, blocked))
             conn.commit()
+            # Reasons
             for mrf in json["metadata"]["federation"]["mrf_simple_info"]:
                 for blocked in json["metadata"]["federation"]["mrf_simple_info"][mrf]:
                     c.execute("update blocks set reason = ? where blocker = ? and blocked = ? and block_level = ?", (json["metadata"]["federation"]["mrf_simple_info"][mrf][blocked]["reason"], blocker, blocked, mrf))
             for blocked in json["metadata"]["federation"]["quarantined_instances_info"]["quarantined_instances"]:
                 c.execute("update blocks set reason = ? where blocker = ? and blocked = ? and block_level = 'quarantined_instances'", (json["metadata"]["federation"]["quarantined_instances_info"]["quarantined_instances"][blocked]["reason"], blocker, blocked))
             conn.commit()
-        except:
-            pass
-
-with open("mastodon_instances.txt", "r") as f:
-    while blocker := f.readline().strip():
+        except Exception as e:
+            print("error:", e, blocker)
+    elif instance[1] == "mastodon":
+        blocker = instance[0]
         print(blocker)
         try:
             c.execute("delete from blocks where blocker = ?", (blocker,))
@@ -50,10 +68,10 @@ with open("mastodon_instances.txt", "r") as f:
                     else:
                         c.execute("select case when ? in (select domain from instances) then 1 else 0 end", (blocked["domain"],))
                         if c.fetchone() == (0,):
-                            c.execute("insert into instances select ?, ?", (blocked["domain"], sha256(bytes(blocked["domain"], "utf-8")).hexdigest()))
+                            c.execute("insert into instances select ?, ?, ?", (blocked["domain"], sha256(bytes(blocked["domain"], "utf-8")).hexdigest(), get_type(blocked["domain"])))
                         c.execute("insert into blocks select ?, ?, ?, ?", (blocker, blocked["domain"], blocked["reason"], block_level))
             conn.commit()
-        except:
-            pass
+        except Exception as e:
+            print("error:", e, blocker)
 
 conn.close()
\ No newline at end of file