fedi-block-api/apis/fedi_block_api.js

132 lines
4.1 KiB
JavaScript
Raw Normal View History

2022-03-06 13:46:43 +00:00
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) => {
2022-03-06 23:36:41 +00:00
res.status(400).json({"message":"use /blocker or /blocked endpoint"});
2022-03-06 14:51:48 +00:00
});
app.get("/blocker", (req, res) => {
2022-03-06 23:36:41 +00:00
res.status(400).json({"message":"insert a domain"});
2022-03-06 14:51:48 +00:00
});
app.get("/blocked", (req, res) => {
2022-03-06 23:36:41 +00:00
res.status(400).json({"message":"insert a domain"});
2022-03-06 13:46:43 +00:00
});
function get_blocker(blocker, _callback, _err_callback) {
2022-03-06 21:22:20 +00:00
db.all("select blocked, block_level from blocks where blocker = ?", blocker, (err, result) => {
2022-03-06 13:46:43 +00:00
if (err) {
_err_callback(err)
return console.error(err.message);
}
2022-03-06 21:22:20 +00:00
reject = [];
media_removal = [];
federated_timeline_removal = [];
media_nsfw = [];
quarantined_instances = [];
other = [];
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;
default:
other.push({
"blocked": block.blocked,
"block_level": block.block_level,
});
}
});
_callback({
reject,
media_removal,
federated_timeline_removal,
media_nsfw,
quarantined_instances,
other,
});
2022-03-06 13:46:43 +00:00
});
}
function get_blocked(blocked, _callback, _err_callback) {
2022-03-06 21:22:20 +00:00
db.all("select blocker, block_level from blocks where blocked = ?", blocked, (err, result) => {
2022-03-06 13:46:43 +00:00
if (err) {
_err_callback(err);
return console.error(err.message);
}
2022-03-06 21:22:20 +00:00
reject = [];
media_removal = [];
federated_timeline_removal = [];
media_nsfw = [];
quarantined_instances = [];
other = [];
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;
default:
other.push({
"blocker": block.blocker,
"block_level": block.block_level,
});
}
});
_callback({
reject,
media_removal,
federated_timeline_removal,
media_nsfw,
quarantined_instances,
other,
});
2022-03-06 13:46:43 +00:00
});
}
app.get("/blocker/:domain", (req, res) => {
const {domain} = req.params;
get_blocker(
domain,
2022-03-06 23:36:41 +00:00
result => res.status(200).json(result),
err => res.status(500).json({"message": err}),
2022-03-06 13:46:43 +00:00
);
});
app.get("/blocked/:domain", (req, res) => {
const {domain} = req.params;
get_blocked(
domain,
2022-03-06 23:36:41 +00:00
result => res.status(200).json(result),
err => res.status(500).json({"message": err}),
2022-03-06 13:46:43 +00:00
);
});