added the fedi block api
This commit is contained in:
51
apis/fedi_block_api.js
Normal file
51
apis/fedi_block_api.js
Normal 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
67
apis/mastodon_api.js
Normal 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
8
apis/package.json
Normal 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
1135
apis/yarn.lock
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user