fedi-block-api/apis/fedi_block_api.js
2022-03-22 17:09:18 +01:00

198 lines
6.5 KiB
JavaScript

const app = require("express")();
const sqlite3 = require('sqlite3').verbose();
const PORT = 8070;
const base_url = ""
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(base_url+"/", (req, res) => {
res.status(400).json({"message":"use /blocker, /blocked or /info endpoint"});
});
app.get(base_url+"/blocker", (req, res) => {
res.status(400).json({"message":"insert a domain"});
});
app.get(base_url+"/blocked", (req, res) => {
res.status(400).json({"message":"insert a domain"});
});
app.get(base_url+"/info", (req, res) => {
db.all("select (select count(domain) from instances) as known, (select count(domain) from instances where software in ('pleroma', 'mastodon')) as indexed, (select count(blocker) from blocks) as blocks", (err, result) => {
if (err) {
res.status(500).json({"message": err});
console.log(err.message);
return;
}
res.status(200).json({
"known_instances": result[0]["known"],
"indexed_instances": result[0]["indexed"],
"blocks_recorded": result[0]["blocks"],
"source_code": "https://gitlab.com/EnjuAihara/fedi-block-api",
});
});
});
function get_blocker(blocker, _callback, _err_callback) {
db.all("select blocked, block_level from blocks where blocker = ?", blocker, (err, result) => {
if (err) {
_err_callback(err);
console.log(err.message);
return;
}
reject = [];
media_removal = [];
federated_timeline_removal = [];
media_nsfw = [];
quarantined_instances = [];
report_removal = [];
followers_only = [];
accept = [];
avatar_removal = [];
banner_removal = [];
reject_deletes = [];
result.map(block => {
switch(block.block_level) {
case "reject":
reject.push(block.blocked);
break;
case "media_removal":
media_removal.push(block.blocked);
break;
case "federated_timeline_removal":
federated_timeline_removal.push(block.blocked);
break;
case "media_nsfw":
media_nsfw.push(block.blocked);
break;
case "quarantined_instances":
quarantined_instances.push(block.blocked);
break;
case "report_removal":
report_removal.push(block.blocked);
break;
case "followers_only":
followers_only.push(block.blocked);
break;
case "accept":
accept.push(block.blocked);
break;
case "avatar_removal":
avatar_removal.push(block.blocked);
break;
case "banner_removal":
banner_removal.push(block.blocked);
break;
case "reject_deletes":
reject_deletes.push(block.blocked);
break;
}
});
_callback({
reject,
media_removal,
federated_timeline_removal,
media_nsfw,
quarantined_instances,
report_removal,
followers_only,
accept,
avatar_removal,
banner_removal,
reject_deletes,
});
});
}
function get_blocked(blocked, _callback, _err_callback) {
db.all("select blocker, block_level from blocks where blocked = ?", blocked, (err, result) => {
if (err) {
_err_callback(err);
console.log(err.message);
return;
}
reject = [];
media_removal = [];
federated_timeline_removal = [];
media_nsfw = [];
quarantined_instances = [];
report_removal = [];
followers_only = [];
accept = [];
avatar_removal = [];
banner_removal = [];
reject_deletes = [];
result.map(block => {
switch(block.block_level) {
case "reject":
reject.push(block.blocker);
break;
case "media_removal":
media_removal.push(block.blocker);
break;
case "federated_timeline_removal":
federated_timeline_removal.push(block.blocker);
break;
case "media_nsfw":
media_nsfw.push(block.blocker);
break;
case "quarantined_instances":
quarantined_instances.push(block.blocker);
break;
case "report_removal":
report_removal.push(block.blocker);
break;
case "followers_only":
followers_only.push(block.blocker);
break;
case "accept":
accept.push(block.blocker);
break;
case "avatar_removal":
avatar_removal.push(block.blocker);
break;
case "banner_removal":
banner_removal.push(block.blocker);
break;
case "reject_deletes":
reject_deletes.push(block.blocker);
break;
}
});
_callback({
reject,
media_removal,
federated_timeline_removal,
media_nsfw,
quarantined_instances,
report_removal,
followers_only,
accept,
avatar_removal,
banner_removal,
reject_deletes,
});
});
}
app.get(base_url+"/blocker/:domain", (req, res) => {
const {domain} = req.params;
get_blocker(
domain,
result => res.status(200).json(result),
err => res.status(500).json({"message": err}),
);
});
app.get(base_url+"/blocked/:domain", (req, res) => {
const {domain} = req.params;
get_blocked(
domain,
result => res.status(200).json(result),
err => res.status(500).json({"message": err}),
);
});