@ -49,9 +49,9 @@ module.exports = async (req, res, next) => {
let redirect = ` / ${ req . params . board } / `
let salt = null ;
let thread = null ;
const { filterBanDuration , filterMode , filters , blockedCountries , resetTrigger ,
const { filterBanDuration , filterMode , filters , blockedCountries , threadLimit , ids , userPostSpoiler ,
lockReset , captchaReset , pphTrigger , tphTrigger , tphTriggerAction , pphTriggerAction ,
maxFiles , sageOnlyEmail , forceAnon , replyLimit , disableReplySubject ,
threadLimit , ids , userPostSpoiler , pphTrigger , tphTrigger , triggerAction ,
captchaMode , lockMode , allowedFileTypes , flags , fileR9KMode , messageR9KMode } = res . locals . board . settings ;
if ( res . locals . permLevel >= 4
&& res . locals . country
@ -479,41 +479,42 @@ module.exports = async (req, res, next) => {
const postId = await Posts . insertOne ( res . locals . board , data , thread ) ;
let enableCaptcha = false ;
if ( triggerAction > 0 //if trigger is enabled
&& ( tphTrigger > 0 || pphTrigger > 0 ) //and has a threshold > 0
&& ( ( triggerAction < 3 && captchaMode < triggerAction ) //and its triggering captcha and captcha isnt on
|| ( triggerAction === 3 && lockMode < 1 ) //or triggering locking and board isnt locked
|| ( triggerAction === 4 && lockMode < 2 ) ) ) {
//read stats to check number threads in past hour
const hourPosts = await Stats . getHourPosts ( res . locals . board . _id ) ;
if ( hourPosts //if stats exist for this hour and its above either trigger
&& ( tphTrigger > 0 && hourPosts . tph >= tphTrigger )
|| ( pphTrigger > 0 && hourPosts . pph > pphTrigger ) ) {
//update in memory for other stuff done e.g. rebuilds
const update = {
'$set' : {
'preTriggerMode' : {
lockMode ,
captchaMode
let enableCaptcha = false ; //make this returned from some function, refactor and move the next section to another file
const pphTriggerActive = ( pphTriggerAction > 0 && pphTrigger > 0 ) ;
const tphTriggerActive = ( tphTriggerAction > 0 && tphTrigger > 0 ) ;
if ( pphTriggerAction || tphTriggerActive ) { //if a trigger is enabled
const triggerUpdate = {
'$set' : { } ,
} ;
//and a setting needs to be updated
const pphTriggerUpdate = ( pphTriggerAction < 3 && captchaMode < pphTriggerAction )
|| ( pphTriggerAction === 3 && lockMode < 1 )
|| ( pphTriggerAction === 4 && lockMode < 2 ) ;
const tphTriggerUpdate = ( tphTriggerAction < 3 && captchaMode < tphTriggerAction )
|| ( tphTriggerAction === 3 && lockMode < 1 )
|| ( tphTriggerAction === 4 && lockMode < 2 ) ;
if ( tphTriggerUpdate || pphTriggerUpdate ) {
const hourPosts = await Stats . getHourPosts ( res . locals . board . _id ) ;
const calcTriggerMode = ( update , trigger , triggerAction , stat ) => { //todo: move this somewhere else
if ( trigger > 0 && stat >= trigger ) {
//update in memory for other stuff done e.g. rebuilds
if ( triggerAction < 3 ) {
res . locals . board . settings . captchaMode = triggerAction ;
update [ '$set' ] [ 'settings.captchaMode' ] = triggerAction ;
enableCaptcha = true ; //todo make this also returned after moving/refactoring this
} else {
res . locals . board . settings . lockMode = triggerAction - 2 ;
update [ '$set' ] [ 'settings.lockMode' ] = triggerAction - 2 ;
}
return true ;
}
} ;
if ( triggerAction < 3 ) {
res . locals . board . settings . captchaMode = triggerAction ;
update [ '$set' ] [ 'settings.captchaMode' ] = triggerAction ;
enableCaptcha = true ;
} else if ( triggerAction === 3 ) {
res . locals . board . settings . lockMode = 1 ;
update [ '$set' ] [ 'settings.lockMode' ] = 1 ;
} else if ( triggerAction === 4 ) {
res . locals . board . settings . lockMode = 2 ;
update [ '$set' ] [ 'settings.lockMode' ] = 2 ;
return false ;
}
//set it in the db
await Boards . updateOne ( res . locals . board . _id , update ) ;
if ( resetTrigger ) {
//mark the board as being triggered so we can return it to old mode after on schedule
const updatedPphTrigger = pphTriggerUpdate && calcTriggerMode ( triggerUpdate , pphTrigger , pphTriggerAction , hourPosts . pph ) ;
const updatedTphTrigger = tphTriggerUpdate && calcTriggerMode ( triggerUpdate , tphTrigger , tphTriggerAction , hourPosts . tph ) ;
if ( updatedPphTrigger || updatedTphTrigger ) {
//set it in the db
await Boards . updateOne ( res . locals . board . _id , triggerUpdate ) ;
await cache . sadd ( 'triggered' , res . locals . board . _id ) ;
}
}