From 64d61c1117374b585018bb9ca04414a4000b58cc Mon Sep 17 00:00:00 2001 From: fatchan Date: Thu, 10 Oct 2019 08:24:16 +0000 Subject: [PATCH] add separate trigger threshold for TPH and PPH stats --- configs/main.json.example | 3 ++- helpers/paramconverter.js | 2 +- models/forms/changeboardsettings.js | 3 ++- models/forms/makepost.js | 21 ++++++++++----------- views/pages/managesettings.pug | 17 ++++++++++------- 5 files changed, 25 insertions(+), 21 deletions(-) diff --git a/configs/main.json.example b/configs/main.json.example index 3b945973..169c1ff5 100644 --- a/configs/main.json.example +++ b/configs/main.json.example @@ -53,7 +53,8 @@ "unlisted": false, "captchaMode": 0, "tphTrigger": 0, - "tphTriggerAction": 0, + "pphTrigger": 0, + "triggerAction": 0, "forceAnon": false, "early404": true, "ids": false, diff --git a/helpers/paramconverter.js b/helpers/paramconverter.js index 05a1b39c..afe2889b 100644 --- a/helpers/paramconverter.js +++ b/helpers/paramconverter.js @@ -5,7 +5,7 @@ const { ObjectId } = require(__dirname+'/../db/db.js') 'checkedreports', 'checkedbans', 'checkedbanners', 'checkedaccounts']) //only these should be arrays, since express bodyparser can output arrays , trimFields = ['tags', 'uri', 'moderators', 'filters', 'announcement', 'description', 'message', 'name', 'subject', 'email', 'password', 'default_name', 'report_reason', 'ban_reason', 'log_message'] //trim if we dont want filed with whitespace - , numberFields = ['filter_mode', 'captcha_mode', 'tph_trigger', 'tph_trigger_action', 'reply_limit', 'move_to_thread', + , numberFields = ['filter_mode', 'captcha_mode', 'tph_trigger', 'pph_trigger', 'trigger_action', 'reply_limit', 'move_to_thread', 'max_files', 'thread_limit', 'thread', 'min_thread_message_length', 'min_reply_message_length', 'auth_level'] //convert these to numbers before they hit our routes , banDurationRegex = /^(?[\d]+y)?(?[\d]+m)?(?[\d]+w)?(?[\d]+d)?(?[\d]+h)?$/ , msTime = require(__dirname+'/mstime.js') diff --git a/models/forms/changeboardsettings.js b/models/forms/changeboardsettings.js index 8a2e6986..e72b41bd 100644 --- a/models/forms/changeboardsettings.js +++ b/models/forms/changeboardsettings.js @@ -52,7 +52,8 @@ module.exports = async (req, res, next) => { 'userPostUnlink': req.body.user_post_unlink ? true : false, 'captchaMode': typeof req.body.captcha_mode === 'number' && req.body.captcha_mode !== oldSettings.captchaMode ? req.body.captcha_mode : oldSettings.captchaMode, 'tphTrigger': typeof req.body.tph_trigger === 'number' && req.body.tph_trigger !== oldSettings.tphTrigger ? req.body.tph_trigger : oldSettings.tphTrigger, - 'tphTriggerAction': typeof req.body.tph_trigger_action === 'number' && req.body.tph_trigger_action !== oldSettings.tphTriggerAction ? req.body.tph_trigger_action : oldSettings.tphTriggerAction, + 'pphTrigger': typeof req.body.pph_trigger === 'number' && req.body.pph_trigger !== oldSettings.pphTrigger ? req.body.pph_trigger : oldSettings.pphTrigger, + 'triggerAction': typeof req.body.trigger_action === 'number' && req.body.trigger_action !== oldSettings.triggerAction ? req.body.trigger_action : oldSettings.triggerAction, 'threadLimit': typeof req.body.thread_limit === 'number' && req.body.thread_limit !== oldSettings.threadLimit ? req.body.thread_limit : oldSettings.threadLimit, 'replyLimit': typeof req.body.reply_limit === 'number' && req.body.reply_limit !== oldSettings.replyLimit ? req.body.reply_limit : oldSettings.replyLimit, 'maxFiles': typeof req.body.max_files === 'number' && req.body.max_files !== oldSettings.maxFiles ? req.body.max_files : oldSettings.maxFiles, diff --git a/models/forms/makepost.js b/models/forms/makepost.js index 99070ac6..edbb7f7a 100644 --- a/models/forms/makepost.js +++ b/models/forms/makepost.js @@ -52,7 +52,7 @@ module.exports = async (req, res, next) => { const { filters, filterBanDuration, filterMode, maxFiles, forceAnon, replyLimit, threadLimit, ids, userPostSpoiler, - defaultName, tphTrigger, tphTriggerAction, + defaultName, pphTrigger, tphTrigger, triggerAction, captchaMode, locked, allowedFileTypes, flags } = res.locals.board.settings; if (locked === true) { await deleteTempFiles(req).catch(e => console.error); @@ -366,25 +366,24 @@ module.exports = async (req, res, next) => { const postId = await Posts.insertOne(res.locals.board, data, thread); let enableCaptcha = false; - if (!data.thread //if this is a new thread - && tphTriggerAction > 0 //and the triger mode is not nothing - && ((tphTriggerAction < 3 && captchaMode < tphTriggerAction) //and captcha mode less than captcha trigger - || (tphTriggerAction === 3 && locked !== true))) { //and not locked with lock trigger + if (triggerAction > 0 //trigger is enabled + && (tphTrigger > 0 || pphTrigger > 0) //and we have a trigger > 0 for threads or posts + && ((triggerAction < 3 && captchaMode < triggerAction) //and captcha mode less than trigger if trigger < 2 + || (triggerAction === 3 && locked !== true))) { //or trigger is to lock and board not locked const pastHourMongoId = Mongo.ObjectId.createFromTime(Math.floor((Date.now() - msTime.hour)/1000)); //count threads in past hour const hourPosts = await Stats.getHourPosts(res.locals.board._id); //if its above the trigger - if (hourPosts && hourPosts.tph && hourPosts.tph >= tphTrigger) { //TODO: add an option to check pph OR tph, not just tph + if (hourPosts && (hourPosts.tph >= tphTrigger || hourPosts.pph > pphTrigger)) { //TODO: add an option to check pph OR tph, not just tph //update in memory for other stuff done e.g. rebuilds const update = { '$set': {} }; - if (tphTriggerAction < 3) { - res.locals.board.settings.captchaMode = tphTriggerAction; - update['$set']['settings.captchaMode'] = tphTriggerAction; + if (triggerAction < 3) { + res.locals.board.settings.captchaMode = triggerAction; + update['$set']['settings.captchaMode'] = triggerAction; enableCaptcha = true; - } - if (tphTriggerAction === 3) { + } else if (triggerAction === 3) { res.locals.board.settings.locked = true; update['$set']['settings.locked'] = true; } diff --git a/views/pages/managesettings.pug b/views/pages/managesettings.pug index 74816b21..52fe6e82 100644 --- a/views/pages/managesettings.pug +++ b/views/pages/managesettings.pug @@ -159,12 +159,15 @@ block content .label TPH Trigger Threshold input(type='number', name='tph_trigger', value=board.settings.tphTrigger) .row - .label TPH Trigger Action - select(name='tph_trigger_action') - option(value='0', selected=board.settings.tphTriggerAction === 0) Do nothing - option(value='1', selected=board.settings.tphTriggerAction === 1) Enable captcha for new thread - option(value='2', selected=board.settings.tphTriggerAction === 2) Enable captcha for all posts - option(value='3', selected=board.settings.tphTriggerAction === 3) Lock Board + .label PPH Trigger Threshold + input(type='number', name='pph_trigger', value=board.settings.pphTrigger) + .row + .label TPH/PPH Trigger Action + select(name='trigger_action') + option(value='0', selected=board.settings.triggerAction === 0) Do nothing + option(value='1', selected=board.settings.triggerAction === 1) Enable captcha for new thread + option(value='2', selected=board.settings.triggerAction === 2) Enable captcha for all posts + option(value='3', selected=board.settings.triggerAction === 3) Lock Board .row .label Filters textarea(name='filters' placeholder='newline separated, max 50') #{board.settings.filters.join('\n')} @@ -173,7 +176,7 @@ block content select(name='filter_mode') option(value='0', selected=board.settings.filterMode === 0) Do nothing option(value='1', selected=board.settings.filterMode === 1) Block post - option(value='2', selected=board.settings.filterMode === 2) Auto ban + option(value='2', selected=board.settings.filterMode === 2) Ban .row .label Filter Auto Ban Duration input(type='text' name='ban_duration' placeholder='e.g. 1w' value=board.settings.filterBanDuration)