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-21 15:58:20 +00:00
res . status ( 400 ) . json ( { "message" : "use /blocker, /blocked or /info 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
} ) ;
2022-03-21 15:58:20 +00:00
app . get ( "/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" ] ,
2022-03-22 16:06:08 +00:00
"source_code" : "https://gitlab.com/EnjuAihara/fedi-block-api" ,
2022-03-21 15:58:20 +00:00
} ) ;
} ) ;
} ) ;
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 ) {
2022-03-21 15:01:59 +00:00
_err _callback ( err ) ;
console . log ( err . message ) ;
return ;
2022-03-06 13:46:43 +00:00
}
2022-03-06 21:22:20 +00:00
reject = [ ] ;
media _removal = [ ] ;
federated _timeline _removal = [ ] ;
media _nsfw = [ ] ;
quarantined _instances = [ ] ;
2022-03-21 17:01:18 +00:00
report _removal = [ ] ;
followers _only = [ ] ;
accept = [ ] ;
avatar _removal = [ ] ;
banner _removal = [ ] ;
reject _deletes = [ ] ;
2022-03-06 21:22:20 +00:00
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 ;
2022-03-21 17:01:18 +00:00
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 ;
2022-03-06 21:22:20 +00:00
}
} ) ;
_callback ( {
reject ,
media _removal ,
federated _timeline _removal ,
media _nsfw ,
quarantined _instances ,
2022-03-21 17:01:18 +00:00
report _removal ,
followers _only ,
accept ,
avatar _removal ,
banner _removal ,
reject _deletes ,
2022-03-06 21:22:20 +00:00
} ) ;
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 ) ;
2022-03-21 15:01:59 +00:00
console . log ( err . message ) ;
return ;
2022-03-06 13:46:43 +00:00
}
2022-03-06 21:22:20 +00:00
reject = [ ] ;
media _removal = [ ] ;
federated _timeline _removal = [ ] ;
media _nsfw = [ ] ;
quarantined _instances = [ ] ;
2022-03-21 17:01:18 +00:00
report _removal = [ ] ;
followers _only = [ ] ;
accept = [ ] ;
avatar _removal = [ ] ;
banner _removal = [ ] ;
reject _deletes = [ ] ;
2022-03-06 21:22:20 +00:00
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 ;
2022-03-21 17:01:18 +00:00
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 ;
2022-03-06 21:22:20 +00:00
}
} ) ;
_callback ( {
reject ,
media _removal ,
federated _timeline _removal ,
media _nsfw ,
quarantined _instances ,
2022-03-21 17:01:18 +00:00
report _removal ,
followers _only ,
accept ,
avatar _removal ,
banner _removal ,
reject _deletes ,
2022-03-06 21:22:20 +00:00
} ) ;
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
) ;
} ) ;