]> git.mxchange.org Git - fba.git/blob - fetch_blocks.py
3b1bd84e0af5f3694daccc028bb7ac6486451420
[fba.git] / fetch_blocks.py
1 from requests import get
2 from json import loads
3 from hashlib import sha256
4 import sqlite3
5
6 conn = sqlite3.connect("blocks.db")
7 c = conn.cursor()
8
9 with open("pleroma_instances.txt", "r") as f:
10     while blocker := f.readline().strip():
11         print(blocker)
12         try:
13             c.execute("delete from blocks where blocker = ?", (blocker,))
14             json = loads(get(f"https://{blocker}/nodeinfo/2.1.json").text)
15             for mrf in json["metadata"]["federation"]["mrf_simple"]:
16                 for blocked in json["metadata"]["federation"]["mrf_simple"][mrf]:
17                     c.execute("select case when ? in (select domain from instances) then 1 else 0 end", (blocked,))
18                     if c.fetchone() == (0,):
19                         c.execute("insert into instances select ?, ?", (blocked, sha256(bytes(blocked, "utf-8")).hexdigest()))
20                     c.execute("insert into blocks select ?, ?, '', ?", (blocker, blocked, mrf))
21             for blocked in json["metadata"]["federation"]["quarantined_instances"]:
22                 c.execute("select case when ? in (select domain from instances) then 1 else 0 end", (blocked,))
23                 if c.fetchone() == (0,):
24                     c.execute("insert into instances select ?, ?", (blocked, sha256(bytes(blocked, "utf-8")).hexdigest()))
25                 c.execute("insert into blocks select ?, ?, '', 'quarantined_instances'", (blocker, blocked))
26             conn.commit()
27             for mrf in json["metadata"]["federation"]["mrf_simple_info"]:
28                 for blocked in json["metadata"]["federation"]["mrf_simple_info"][mrf]:
29                     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))
30             for blocked in json["metadata"]["federation"]["quarantined_instances_info"]["quarantined_instances"]:
31                 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))
32             conn.commit()
33         except:
34             pass
35
36 with open("mastodon_instances.txt", "r") as f:
37     while blocker := f.readline().strip():
38         print(blocker)
39         try:
40             c.execute("delete from blocks where blocker = ?", (blocker,))
41             json = loads(get(f"http://127.0.0.1:8069/{blocker}").text)
42             for blocked in json["reject"]:
43                 if blocked["domain"].count("*") > 1:
44                     c.execute("insert into blocks select ?, ifnull((select domain from instances where hash = ?), ?), ?, 'reject'", (blocker, blocked["hash"], blocked["hash"], blocked['reason']))
45                 else:
46                     c.execute("select case when ? in (select domain from instances) then 1 else 0 end", (blocked["domain"],))
47                     if c.fetchone() == (0,):
48                         c.execute("insert into instances select ?, ?", (blocked["domain"], sha256(bytes(blocked["domain"], "utf-8")).hexdigest()))
49                     c.execute("insert into blocks select ?, ?, ?, 'reject'", (blocker, blocked["domain"], blocked["reason"]))
50             for blocked in json["media_removal"]:
51                 if blocked["domain"].count("*") > 1:
52                     c.execute("insert into blocks select ?, ifnull((select domain from instances where hash = ?), ?), ?, 'media_removal'", (blocker, blocked["hash"], blocked["hash"], blocked['reason']))
53                 else:
54                     c.execute("select case when ? in (select domain from instances) then 1 else 0 end", (blocked["domain"],))
55                     if c.fetchone() == (0,):
56                         c.execute("insert into instances select ?, ?", (blocked["domain"], sha256(bytes(blocked["domain"], "utf-8")).hexdigest()))
57                     c.execute("insert into blocks select ?, ?, ?, 'media_removal'", (blocker, blocked["domain"], blocked["reason"]))
58             for blocked in json["federated_timeline_removal"]:
59                 if blocked["domain"].count("*") > 1:
60                     c.execute("insert into blocks select ?, ifnull((select domain from instances where hash = ?), ?), ?, 'federated_timeline_removal'", (blocker, blocked["hash"], blocked["hash"], blocked['reason']))
61                 else:
62                     c.execute("select case when ? in (select domain from instances) then 1 else 0 end", (blocked["domain"],))
63                     if c.fetchone() == (0,):
64                         c.execute("insert into instances select ?, ?", (blocked["domain"], sha256(bytes(blocked["domain"], "utf-8")).hexdigest()))
65                     c.execute("insert into blocks select ?, ?, ?, 'federated_timeline_removal'", (blocker, blocked["domain"], blocked["reason"]))
66             conn.commit()
67         except:
68             pass
69
70 conn.close()