added the fedi block api

This commit is contained in:
Enju Aihara
2022-03-06 14:46:43 +01:00
parent 63ecfd1e40
commit d2cf9eb561
9 changed files with 564 additions and 95 deletions

51
apis/fedi_block_api.js Normal file
View File

@ -0,0 +1,51 @@
const app = require("express")();
const sqlite3 = require('sqlite3').verbose();
const PORT = 8070;
const db = new sqlite3.Database("../blocks.db", sqlite3.OPEN_READONLY, err => {
if (err)
return console.error(err.message);
});
app.listen(PORT, "127.0.0.1", () => console.log("API started on http://127.0.0.1:"+PORT));
app.get("/", (req, res) => {
res.status(400).send({"message":"insert a domain"});
});
function get_blocker(blocker, _callback, _err_callback) {
db.all("select blocked, reason, block_level from blocks where blocker = ?", blocker, (err, result) => {
if (err) {
_err_callback(err)
return console.error(err.message);
}
_callback(result);
});
}
function get_blocked(blocked, _callback, _err_callback) {
db.all("select blocker, reason, block_level from blocks where blocked = ?", blocked, (err, result) => {
if (err) {
_err_callback(err);
return console.error(err.message);
}
_callback(result);
});
}
app.get("/blocker/:domain", (req, res) => {
const {domain} = req.params;
get_blocker(
domain,
result => res.status(200).send({result}),
err => res.status(500).send({"message": err}),
);
});
app.get("/blocked/:domain", (req, res) => {
const {domain} = req.params;
get_blocked(
domain,
result => res.status(200).send({result}),
err => res.status(500).send({"message": err}),
);
});

67
apis/mastodon_api.js Normal file
View File

@ -0,0 +1,67 @@
const puppeteer = require("puppeteer");
const app = require("express")();
const PORT = 8069;
async function main(domain, _callback) {
const browser = await puppeteer.launch();
const page = await browser.newPage();
let data;
try {
await page.goto("https://"+domain+"/about/more", {waitUntil: "networkidle2"});
data = await page.evaluate(() => {
let reject = []; // Suspended servers
let media_removal = []; // Filtered media
let federated_timeline_removal = []; // Silenced servers, Limited servers
Array.from(document.querySelectorAll("table")).map(table => {
if (["Suspended servers","Filtered media","Limited servers", "Silenced servers"].includes(table.previousElementSibling.previousElementSibling.innerText)) {
Array.from(table.rows).map((row, j) => {
if (j == 0)
return;
let row_obj = {
domain: row.childNodes[1].innerText,
hash: row.querySelector("[title]").title.replace("SHA-256: ", ""),
reason: row.childNodes[3].innerText,
}
switch(table.previousElementSibling.previousElementSibling.innerText) {
case "Suspended servers":
reject.push(row_obj);
break;
case "Filtered media":
media_removal.push(row_obj);
break;
case "Limited servers":
case "Silenced servers":
federated_timeline_removal.push(row_obj);
break;
}
});
}
});
return {
reject,
media_removal,
federated_timeline_removal,
}
})
} catch(err) {
console.log(err.message);
}
_callback(data);
await browser.close();
}
app.listen(PORT, "127.0.0.1", () => console.log("API started on http://127.0.0.1:"+PORT));
app.get("/", (req, res) => {
res.status(400).send({"message":"insert a domain"});
});
app.get("/:domain", (req, res) => {
const {domain} = req.params;
main(domain, data => res.status(200).send({
"reject": data.reject,
"media_removal": data.media_removal,
"federated_timeline_removal": data.federated_timeline_removal,
}));
});

8
apis/package.json Normal file
View File

@ -0,0 +1,8 @@
{
"dependencies": {
"express": "^4.17.3",
"puppeteer": "^13.4.1",
"sqlite3": "^4.2.0",
"tar": "4.4.18"
}
}

1135
apis/yarn.lock Normal file

File diff suppressed because it is too large Load Diff