diff --git a/controllers/forms.js b/controllers/forms.js index 48f56642..e5875a27 100644 --- a/controllers/forms.js +++ b/controllers/forms.js @@ -174,15 +174,25 @@ router.post('/board/:board/post', Boards.exists, banCheck, paramConverter, verif if (!req.body.message && numFiles === 0) { errors.push('Must provide a message or file'); } - if (req.body.message && req.body.message.length > 2000) { - errors.push('Message must be 2000 characters or less'); + if (!req.body.thread && (res.locals.board.settings.forceOPFile && res.locals.board.settings.maxFiles > 0)) { + errors.push('Threads must include a file'); } - if (!req.body.thread && (!req.body.message || req.body.message.length === 0)) { + if (!req.body.thread && res.locals.board.settings.forceOPMessage && (!req.body.message || req.body.message.length === 0)) { errors.push('Threads must include a message'); } + if (req.body.message) { + if (req.body.message.length > 2000) { + errors.push('Message must be 2000 characters or less'); + } else if (req.body.message.length < res.locals.board.settings.minMessageLength) { + errors.push(`Message must be at least ${res.locals.board.settings.minMessageLength} characters long`); + } + } if (req.body.name && req.body.name.length > 50) { errors.push('Name must be 50 characters or less'); } + if (res.locals.board.settings.forceOPSubject && (!req.body.subject || req.body.subject.length === 0)) { + errors.push('Threads must include a subject'); + } if (req.body.subject && req.body.subject.length > 50) { errors.push('Subject must be 50 characters or less'); } diff --git a/views/pages/manage.pug b/views/pages/manage.pug index 235aa902..69e3b9ca 100644 --- a/views/pages/manage.pug +++ b/views/pages/manage.pug @@ -21,9 +21,24 @@ block content label.postform-style.ph-5 input(type='checkbox', name='force_anon', value='true' checked=board.settings.forceAnon) | Disable names and only allow sage email + section.postform-row + .postform-label Force OP Message + label.postform-style.ph-5 + input(type='checkbox', name='force_op_message', value='true' checked=board.settings.forceOPMessage) + section.postform-row + .postform-label Force OP Subject + label.postform-style.ph-5 + input(type='checkbox', name='force_op_subject', value='true' checked=board.settings.forceOPSubject) + section.postform-row + .postform-label Force OP File + label.postform-style.ph-5 + input(type='checkbox', name='force_op_file', value='true' checked=board.settings.forceOPFile) section.postform-row .postform-label Anon Name input(type='text' name='default_name' placeholder=board.settings.defaultName) + section.postform-row + .postform-label Min Message Length + input(type='text' name='min_message_length' placeholder=board.settings.minMessageLength) section.postform-row .postform-label Thread Limit input(type='text' name='thread_limit' placeholder=board.settings.threadLimit) diff --git a/wipe.js b/wipe.js index 817f4e90..18a5896d 100644 --- a/wipe.js +++ b/wipe.js @@ -47,6 +47,10 @@ const Mongo = require(__dirname+'/db/db.js') threadLimit: 100, replyLimit: 300, maxFiles: 3, + forceOPSubject: false, + forceOPMessage: true, + forceOPFile: true, + minMessageLength: 0, defaultName: 'Anonymous', } }) @@ -63,6 +67,10 @@ const Mongo = require(__dirname+'/db/db.js') threadLimit: 100, replyLimit: 300, maxFiles: 3, + forceOPSubject: false, + forceOPMessage: true, + forceOPFile: true, + minMessageLength: 0, defaultName: 'Anonymous', } }) @@ -79,6 +87,10 @@ const Mongo = require(__dirname+'/db/db.js') threadLimit: 100, replyLimit: 300, maxFiles: 0, + forceOPSubject: false, + forceOPMessage: true, + forceOPFile: true, + minMessageLength: 0, defaultName: 'Anonymous', } })