add separate trigger threshold for TPH and PPH stats

merge-requests/208/head
fatchan 5 years ago
parent 8e5d1a15f8
commit 64d61c1117
  1. 3
      configs/main.json.example
  2. 2
      helpers/paramconverter.js
  3. 3
      models/forms/changeboardsettings.js
  4. 21
      models/forms/makepost.js
  5. 17
      views/pages/managesettings.pug

@ -53,7 +53,8 @@
"unlisted": false,
"captchaMode": 0,
"tphTrigger": 0,
"tphTriggerAction": 0,
"pphTrigger": 0,
"triggerAction": 0,
"forceAnon": false,
"early404": true,
"ids": false,

@ -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 = /^(?<year>[\d]+y)?(?<month>[\d]+m)?(?<week>[\d]+w)?(?<day>[\d]+d)?(?<hour>[\d]+h)?$/
, msTime = require(__dirname+'/mstime.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,

@ -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;
}

@ -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)

Loading…
Cancel
Save