@ -4,23 +4,22 @@ const { Bans } = require(__dirname+'/../../db/')
, dynamicResponse = require ( _ _dirname + '/../misc/dynamic.js' ) ;
//ehhh, kinda too many args
module . exports = async ( req , res , globalFilter , hitFilter , filterMode ,
filterMessage , filterBanDuration , filterBanAppealable , redirect ) => {
module . exports = async ( req , res , globalFilter , hit , filter , redirect ) => {
const { _ _ } = res . locals ;
const blockMessage = _ _ ( 'Your post was blocked by a word filter' ) + ( filterMessage ? ': ' + filterMessage : '' ) ;
const blockMessage = _ _ ( 'Your post was blocked by a word filter' ) + ( filter . filter Message ? ': ' + filter . filterMessage : '' ) ;
if ( filterMode === 1 ) {
if ( filter . filter Mode === 1 ) {
return dynamicResponse ( req , res , 400 , 'message' , {
'title' : _ _ ( 'Bad request' ) ,
'message' : blockMessage ,
'redirect' : redirect
} ) ;
} else {
} else if ( filter . filterMode === 2 ) {
const banBoard = globalFilter ? null : res . locals . board . _id ;
const banDate = new Date ( ) ;
const banExpiry = new Date ( filterBanDuration + banDate . getTime ( ) ) ;
const banExpiry = new Date ( filter . filter BanDuration + banDate . getTime ( ) ) ;
const ban = {
'ip' : {
'cloak' : res . locals . ip . cloak ,
@ -28,15 +27,15 @@ module.exports = async (req, res, globalFilter, hitFilter, filterMode,
'type' : res . locals . ip . type ,
} ,
'range' : 0 ,
'reason' : _ _ ( ` ${ globalFilter ? 'global ' : '' } word filter auto ban ` ) + ( filterMessage ? ': ' + filterMessage : '' ) ,
'reason' : _ _ ( ` ${ globalFilter ? 'global ' : '' } word filter auto ban ` ) + ( filter . filter Message ? ': ' + filter . filterMessage : '' ) ,
'board' : banBoard ,
'posts' : null ,
'issuer' : 'system' , //todo: make a "system" property instead?
'date' : banDate ,
'expireAt' : banExpiry ,
'allowAppeal' : filterBanAppealable ,
'allowAppeal' : filter . filter BanAppealable,
'showUser' : true ,
'note' : _ _ ( ` ${ globalFilter ? 'global ' : '' } filter hit: "%s" ` , ( hitFilter ) ) ,
'note' : _ _ ( ` ${ globalFilter ? 'global ' : '' } filter hit: "%s" ` , ( hit ) ) ,
'seen' : true ,
} ;
const insertedResult = await Bans . insertOne ( ban ) ;
@ -47,6 +46,16 @@ module.exports = async (req, res, globalFilter, hitFilter, filterMode,
return dynamicResponse ( req , res , 403 , 'ban' , {
bans : [ ban ]
} ) ;
} else {
//the filter could have hit any part of the combinedstring
//name field omitted to prevent malicious filter from revealing tripcodes
const fields = [ 'email' , 'subject' , 'message' ] ;
for ( const field of fields ) {
if ( req . body [ field ] ) {
req . body [ field ] = req . body [ field ] . replaceAll ( hit , filter . replaceText ) ;
}
}
return ;
}
} ;