Capcode input changes reference #222

If a user is board owner/mod, use higher capcode only if explicitly entered, else use board owner/mod capcode
Strip extra repititions
Default back to stafflevel for perm if theres a mismatch
merge-requests/208/head
Thomas Lynch 4 years ago
parent 25ce30dde8
commit b20ca7cc20
  1. 44
      helpers/posting/name.js
  2. 3
      models/forms/editpost.js
  3. 3
      models/forms/makepost.js
  4. 3
      views/pages/editpost.pug

@ -2,11 +2,14 @@
const getTripCode = require(__dirname+'/tripcode.js')
, nameRegex = /^(?<name>(?!##).*?)?(?:##(?<tripcode>[^ ]{1}.*?))?(?<capcode>##(?<capcodetext> .*?)?)?$/
, capcodeLevels = ['Admin', 'Global Staff', 'Board Owner', 'Board Mod'];
, staffLevels = ['Admin', 'Global Staff', 'Board Owner', 'Board Mod']
, staffLevelsRegex = new RegExp(`(${staffLevels.join('|')})+`, 'igm')
module.exports = async (inputName, permLevel, boardSettings) => {
module.exports = async (inputName, permLevel, boardSettings, boardOwner, username) => {
const { forceAnon, defaultName } = boardSettings;
const { forceAnon, defaultName, moderators } = boardSettings;
const isBoardOwner = username === boardOwner;
const isBoardMod = moderators.includes(username);
let name = defaultName;
let tripcode = null;
@ -26,12 +29,15 @@ module.exports = async (inputName, permLevel, boardSettings) => {
}
//capcode
if (permLevel < 4 && groups.capcode) {
let type = capcodeLevels[permLevel];
capcode = groups.capcodetext ? groups.capcodetext.trim() : type;
if (type.toLowerCase() === capcode.toLowerCase()) {
capcode = type;
} else {
capcode = `${type} ${capcode}`;
let capcodeInput = groups.capcodetext ? groups.capcodetext.trim() : '';
//by default, use board staff if ismod/owner, else use higher staff
let staffLevel = staffLevels.find((sl, l) => capcodeInput.toLowerCase().startsWith(sl.toLowerCase()) && l === permLevel)
|| (isBoardOwner ? staffLevels[2]
: isBoardMod ? staffLevels[3]
: staffLevels[permLevel]); //kill me
capcode = staffLevel;
if (capcodeInput && capcodeInput.toLowerCase() !== staffLevel.toLowerCase()) {
capcode = `${staffLevel} ${capcodeInput.replace(staffLevelsRegex, '').trim()}`;
}
capcode = `## ${capcode}`;
}
@ -41,3 +47,23 @@ module.exports = async (inputName, permLevel, boardSettings) => {
return { name, tripcode, capcode };
}
//console.table([
//
//{test:'Global Staff is also Board Mod', input:'##', output: test('##', 1, {forceAnon: false, defaultName:'Anon', moderators:['user']}, 'boardowner', 'user')},
//{test:'Global Staff is also Board Mod', input:'## test', output: test('## test', 1, {forceAnon: false, defaultName:'Anon', moderators:['user']}, 'boardowner', 'user')},
//{test:'Global Staff is also Board Mod', input:'## Global Staff', output: test('## Global Staff', 1, {forceAnon: false, defaultName:'Anon', moderators:['user']}, 'boardowner', 'user')},
//{test:'Global Staff is also Board Mod', input:'## Global Staff test', output: test('## Global Staff test', 1, {forceAnon: false, defaultName:'Anon', moderators:['user']}, 'boardowner', 'user')},
//{},
//{test:'Global Staff is also Board Owner', input:'##', output: test('##', 1, {forceAnon: false, defaultName:'Anon', moderators:['boardmod']}, 'user', 'user')},
//{test:'Global Staff is also Board Owner', input:'## test', output: test('## test', 1, {forceAnon: false, defaultName:'Anon', moderators:['boardmod']}, 'user', 'user')},
//{test:'Global Staff is also Board Owner', input:'## Global Staff', output: test('## Global Staff', 1, {forceAnon: false, defaultName:'Anon', moderators:['boardmod']}, 'user', 'user')},
//{test:'Global Staff is also Board Owner', input:'## Global Staff test', output: test('## Global Staff test', 1, {forceAnon: false, defaultName:'Anon', moderators:['boardmod']}, 'user', 'user')},
//{},
//{test:'Global Staff is not board staff', input:'##', output: test('##', 1, {forceAnon: false, defaultName:'Anon', moderators:['boardmod']}, 'boardowner', 'user')},
//{test:'Global Staff is not board staff', input:'## test', output: test('## test', 1, {forceAnon: false, defaultName:'Anon', moderators:['boardmod']}, 'boardowner', 'user')},
//{test:'Global Staff is not board staff', input:'## Global Staff', output: test('## Global Staff', 1, {forceAnon: false, defaultName:'Anon', moderators:['boardmod']}, 'boardowner', 'user')},
//{test:'Global Staff is not board staff', input:'## Global Staff test', output: test('## Global Staff test', 1, {forceAnon: false, defaultName:'Anon', moderators:['boardmod']}, 'boardowner', 'user')},
//
//]);

@ -74,7 +74,8 @@ todo: handle some more situations
}
//new name, trip and cap
const { name, tripcode, capcode } = await nameHandler(req.body.name, res.locals.permLevel, board.settings);
const { name, tripcode, capcode } = await nameHandler(req.body.name, res.locals.permLevel,
board.settings, board.owner, res.locals.user ? res.locals.user.username : null);
//new message and quotes
const nomarkup = prepareMarkdown(req.body.message, false);
const { message, quotes, crossquotes } = await messageHandler(nomarkup, req.body.board, post.thread);

@ -334,7 +334,8 @@ module.exports = async (req, res, next) => {
let email = (res.locals.permLevel < 4 || (!forceAnon && !sageOnlyEmail) || req.body.email === 'sage') ? req.body.email : null;
//get name, trip and cap
const { name, tripcode, capcode } = await nameHandler(req.body.name, res.locals.permLevel, res.locals.board.settings);
const { name, tripcode, capcode } = await nameHandler(req.body.name, res.locals.permLevel,
res.locals.board.settings, res.locals.board.owner, res.locals.user ? res.locals.user.username : null);
//get message, quotes and crossquote array
const nomarkup = prepareMarkdown(req.body.message, true);
const { message, quotes, crossquotes } = await messageHandler(nomarkup, req.params.board, req.body.thread);

@ -20,8 +20,7 @@ block content
include ../includes/posticons.pug
input.edit.post-subject(value=post.subject placeholder='Subject' type='text' name='subject' maxlength=globalLimits.fieldLength.subject)
input.edit.post-name(value=post.email type='text' name='email' placeholder='Email' maxlength=globalLimits.fieldLength.email)
- const capcodeInput = post.capcode && post.capcode.length > 0 ? '## '+post.capcode.split(' ').slice(2) : '';
input.edit.post-name(type='text' name='name' placeholder='Name' maxlength=globalLimits.fieldLength.name value=post.name+capcodeInput)
input.edit.post-name(type='text' name='name' placeholder='Name' maxlength=globalLimits.fieldLength.name value=post.name+(post.capcode || ''))
if post.country && post.country.code
span(class=`flag flag-${post.country.code.toLowerCase()}` title=post.country.name alt=post.country.name)
|

Loading…
Cancel
Save