From cd985a676a9bb715aa3ed20cef01767956ab7ea9 Mon Sep 17 00:00:00 2001
From: Enju Aihara <5-EnjuAihara@users.noreply.gitlab.varis.social>
Date: Sat, 5 Mar 2022 11:56:13 +0100
Subject: [PATCH] insert new domains with hash into the instance table

---
 fetch_blocks.py | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/fetch_blocks.py b/fetch_blocks.py
index 6c7491b..3b1bd84 100644
--- a/fetch_blocks.py
+++ b/fetch_blocks.py
@@ -1,5 +1,6 @@
 from requests import get
 from json import loads
+from hashlib import sha256
 import sqlite3
 
 conn = sqlite3.connect("blocks.db")
@@ -13,8 +14,14 @@ with open("pleroma_instances.txt", "r") as f:
             json = loads(get(f"https://{blocker}/nodeinfo/2.1.json").text)
             for mrf in json["metadata"]["federation"]["mrf_simple"]:
                 for blocked in json["metadata"]["federation"]["mrf_simple"][mrf]:
+                    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 blocks select ?, ?, '', ?", (blocker, blocked, mrf))
             for blocked in json["metadata"]["federation"]["quarantined_instances"]:
+                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 blocks select ?, ?, '', 'quarantined_instances'", (blocker, blocked))
             conn.commit()
             for mrf in json["metadata"]["federation"]["mrf_simple_info"]:
@@ -36,16 +43,25 @@ with open("mastodon_instances.txt", "r") as f:
                 if blocked["domain"].count("*") > 1:
                     c.execute("insert into blocks select ?, ifnull((select domain from instances where hash = ?), ?), ?, 'reject'", (blocker, blocked["hash"], blocked["hash"], blocked['reason']))
                 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 blocks select ?, ?, ?, 'reject'", (blocker, blocked["domain"], blocked["reason"]))
             for blocked in json["media_removal"]:
                 if blocked["domain"].count("*") > 1:
                     c.execute("insert into blocks select ?, ifnull((select domain from instances where hash = ?), ?), ?, 'media_removal'", (blocker, blocked["hash"], blocked["hash"], blocked['reason']))
                 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 blocks select ?, ?, ?, 'media_removal'", (blocker, blocked["domain"], blocked["reason"]))
             for blocked in json["federated_timeline_removal"]:
                 if blocked["domain"].count("*") > 1:
                     c.execute("insert into blocks select ?, ifnull((select domain from instances where hash = ?), ?), ?, 'federated_timeline_removal'", (blocker, blocked["hash"], blocked["hash"], blocked['reason']))
                 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 blocks select ?, ?, ?, 'federated_timeline_removal'", (blocker, blocked["domain"], blocked["reason"]))
             conn.commit()
         except:
-- 
GitLab