|
|
@ -9,7 +9,19 @@ const { Boards, Posts, Accounts } = require(__dirname+'/../../db/') |
|
|
|
, linkQuotes = require(__dirname+'/../../helpers/posting/quotes.js') |
|
|
|
, linkQuotes = require(__dirname+'/../../helpers/posting/quotes.js') |
|
|
|
, { markdown } = require(__dirname+'/../../helpers/posting/markdown.js') |
|
|
|
, { markdown } = require(__dirname+'/../../helpers/posting/markdown.js') |
|
|
|
, sanitizeOptions = require(__dirname+'/../../helpers/posting/sanitizeoptions.js') |
|
|
|
, sanitizeOptions = require(__dirname+'/../../helpers/posting/sanitizeoptions.js') |
|
|
|
, sanitize = require('sanitize-html'); |
|
|
|
, sanitize = require('sanitize-html') |
|
|
|
|
|
|
|
, trimSetting = (setting, oldSetting) => { |
|
|
|
|
|
|
|
return setting && setting.trim().length > 0 ? setting : oldSetting; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
, numberSetting = (setting, oldSetting) => { |
|
|
|
|
|
|
|
return typeof setting === 'number' && setting !== oldSetting ? setting : oldSetting; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
, booleanSetting = (setting) => { |
|
|
|
|
|
|
|
return setting != null; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
, arraySetting = (setting, oldSetting, limit) => { |
|
|
|
|
|
|
|
return setting !== null ? setting.split('\r\n').filter(n => n).slice(0,limit) : oldSettings; |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
module.exports = async (req, res, next) => { |
|
|
|
module.exports = async (req, res, next) => { |
|
|
|
|
|
|
|
|
|
|
@ -44,63 +56,61 @@ module.exports = async (req, res, next) => { |
|
|
|
const modsRemoved = oldSettings.moderators.filter(m => !moderators.includes(m)); |
|
|
|
const modsRemoved = oldSettings.moderators.filter(m => !moderators.includes(m)); |
|
|
|
const modsAdded = moderators.filter(m => !oldSettings.moderators.includes(m)); |
|
|
|
const modsAdded = moderators.filter(m => !oldSettings.moderators.includes(m)); |
|
|
|
if (modsRemoved.length > 0) { |
|
|
|
if (modsRemoved.length > 0) { |
|
|
|
//remove mod from accounts
|
|
|
|
|
|
|
|
promises.push(Accounts.removeModBoard(modsRemoved, req.params.board)); |
|
|
|
promises.push(Accounts.removeModBoard(modsRemoved, req.params.board)); |
|
|
|
} |
|
|
|
} |
|
|
|
if (modsAdded.length > 0) { |
|
|
|
if (modsAdded.length > 0) { |
|
|
|
//add mod to accounts
|
|
|
|
|
|
|
|
promises.push(Accounts.addModBoard(modsAdded, req.params.board)); |
|
|
|
promises.push(Accounts.addModBoard(modsAdded, req.params.board)); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
//todo: make separate functions for handling array, boolean, number, text settings.
|
|
|
|
//todo: make separate functions for handling array, boolean, number, text settings.
|
|
|
|
const newSettings = { |
|
|
|
const newSettings = { |
|
|
|
moderators, |
|
|
|
moderators, |
|
|
|
'name': req.body.name && req.body.name.trim().length > 0 ? req.body.name : oldSettings.name, |
|
|
|
'name': trimSetting(req.body.name, oldSettings.name), |
|
|
|
'description': req.body.description && req.body.description.trim().length > 0 ? req.body.description : oldSettings.description, |
|
|
|
'description': trimSetting(req.body.description, oldSettings.description), |
|
|
|
'sfw': req.body.sfw ? true : false, |
|
|
|
'defaultName': trimSetting(req.body.default_name, oldSettings.defaultName), |
|
|
|
'unlisted': req.body.unlisted ? true : false, |
|
|
|
'theme': req.body.theme || oldSettings.theme, |
|
|
|
'webring': req.body.webring ? true : false, |
|
|
|
'codeTheme': req.body.code_theme || oldSettings.codeTheme, |
|
|
|
'locked': req.body.locked ? true : false, |
|
|
|
'sfw': booleanSetting(req.body.sfw), |
|
|
|
'early404': req.body.early404 ? true : false, |
|
|
|
'unlisted': booleanSetting(req.body.unlisted), |
|
|
|
'ids': req.body.ids ? true : false, |
|
|
|
'webring': booleanSetting(req.body.webring), |
|
|
|
'flags': req.body.flags ? true : false, |
|
|
|
'locked': booleanSetting(req.body.locked), |
|
|
|
'forceAnon': req.body.force_anon ? true : false, |
|
|
|
'early404': booleanSetting(req.body.early404), |
|
|
|
'userPostDelete': req.body.user_post_delete ? true : false, |
|
|
|
'ids': booleanSetting(req.body.ids), |
|
|
|
'userPostSpoiler': req.body.user_post_spoiler ? true : false, |
|
|
|
'flags': booleanSetting(req.body.flags), |
|
|
|
'userPostUnlink': req.body.user_post_unlink ? true : false, |
|
|
|
'forceAnon': booleanSetting(req.body.force_anon), |
|
|
|
'captchaMode': typeof req.body.captcha_mode === 'number' && req.body.captcha_mode !== oldSettings.captchaMode ? req.body.captcha_mode : oldSettings.captchaMode, |
|
|
|
'userPostDelete': booleanSetting(req.body.user_post_delete), |
|
|
|
'tphTrigger': typeof req.body.tph_trigger === 'number' && req.body.tph_trigger !== oldSettings.tphTrigger ? req.body.tph_trigger : oldSettings.tphTrigger, |
|
|
|
'userPostSpoiler': booleanSetting(req.body.user_post_spoiler), |
|
|
|
'pphTrigger': typeof req.body.pph_trigger === 'number' && req.body.pph_trigger !== oldSettings.pphTrigger ? req.body.pph_trigger : oldSettings.pphTrigger, |
|
|
|
'userPostUnlink': booleanSetting(req.body.user_post_unlink), |
|
|
|
'triggerAction': typeof req.body.trigger_action === 'number' && req.body.trigger_action !== oldSettings.triggerAction ? req.body.trigger_action : oldSettings.triggerAction, |
|
|
|
'forceThreadMessage': booleanSetting(req.body.force_thread_message), |
|
|
|
'threadLimit': typeof req.body.thread_limit === 'number' && req.body.thread_limit !== oldSettings.threadLimit ? req.body.thread_limit : oldSettings.threadLimit, |
|
|
|
'forceThreadFile': booleanSetting(req.body.force_thread_file), |
|
|
|
'replyLimit': typeof req.body.reply_limit === 'number' && req.body.reply_limit !== oldSettings.replyLimit ? req.body.reply_limit : oldSettings.replyLimit, |
|
|
|
'forceReplyMessage': booleanSetting(req.body.force_reply_message), |
|
|
|
'maxFiles': typeof req.body.max_files === 'number' && req.body.max_files !== oldSettings.maxFiles ? req.body.max_files : oldSettings.maxFiles, |
|
|
|
'forceReplyFile': booleanSetting(req.body.force_reply_file), |
|
|
|
'minThreadMessageLength': typeof req.body.min_thread_message_length === 'number' && req.body.min_thread_message_length !== oldSettings.minThreadMessageLength ? req.body.min_thread_message_length : oldSettings.minThreadMessageLength, |
|
|
|
'forceThreadSubject': booleanSetting(req.body.force_thread_subject), |
|
|
|
'minReplyMessageLength': typeof req.body.min_reply_message_length === 'number' && req.body.min_reply_message_length !== oldSettings.minReplyMessageLength ? req.body.min_reply_message_length : oldSettings.minReplyMessageLength, |
|
|
|
'captchaMode': numberSetting(req.body.captcha_mode, oldSettings.captchaMode), |
|
|
|
'forceThreadMessage': req.body.force_thread_message ? true : false, |
|
|
|
'tphTrigger': numberSetting(req.body.tph_trigger, oldSettings.tphTrigger), |
|
|
|
'forceThreadFile': req.body.force_thread_file ? true : false, |
|
|
|
'pphTrigger': numberSetting(req.body.pph_trigger, oldSettings.pphTrigger), |
|
|
|
'forceReplyMessage': req.body.force_reply_message ? true : false, |
|
|
|
'triggerAction': numberSetting(req.body.trigger_action, oldSettings.triggerAction), |
|
|
|
'forceReplyFile': req.body.force_reply_file ? true : false, |
|
|
|
'threadLimit': numberSetting(req.body.thread_limit, oldSettings.threadLimit), |
|
|
|
'forceThreadSubject': req.body.force_thread_subject ? true : false, |
|
|
|
'replyLimit': numberSetting(req.body.reply_limit, oldSettings.replyLimit), |
|
|
|
'defaultName': req.body.default_name && req.body.default_name.trim().length > 0 ? req.body.default_name : oldSettings.defaultName, |
|
|
|
'maxFiles': numberSetting(req.body.max_files, oldSettings.maxFiles), |
|
|
|
'tags': req.body.tags !== null ? req.body.tags.split('\r\n').filter(n => n).slice(0,10) : oldSettings.tags, |
|
|
|
'minThreadMessageLength': numberSetting(req.body.min_thread_message_length, oldSettings.minThreadMessageLength), |
|
|
|
'filters': req.body.filters !== null ? req.body.filters.split('\r\n').filter(n => n).slice(0,50) : oldSettings.filters, |
|
|
|
'minReplyMessageLength': numberSetting(req.body.min_reply_message_length, oldSettings.minReplyMessageLength), |
|
|
|
'filterMode': typeof req.body.filter_mode === 'number' && req.body.filter_mode !== oldSettings.filterMode ? req.body.filter_mode : oldSettings.filterMode, |
|
|
|
'filterMode': numberSetting(req.body.filter_mode, oldSettings.filterMode), |
|
|
|
'filterBanDuration': typeof req.body.ban_duration === 'number' && req.body.ban_duration !== oldSettings.filterBanDuration ? req.body.ban_duration : oldSettings.filterBanDuration, |
|
|
|
'filterBanDuration': numberSetting(req.body.ban_duration, oldSettings.filterBanDuration), |
|
|
|
'theme': req.body.theme ? req.body.theme : oldSettings.theme, |
|
|
|
'tags': arraySetting(req.body.tags, oldSettings.tags, 10), |
|
|
|
'codeTheme': req.body.code_theme ? req.body.code_theme : oldSettings.codeTheme, |
|
|
|
'filters': arraySetting(req.body.filters, oldSettings.filters, 50), |
|
|
|
'announcement': { |
|
|
|
'announcement': { |
|
|
|
'raw': req.body.announcement !== null ? req.body.announcement : oldSettings.announcement.raw, |
|
|
|
'raw': req.body.announcement !== null ? req.body.announcement : oldSettings.announcement.raw, |
|
|
|
'markdown': req.body.announcement !== null ? markdownAnnouncement : oldSettings.announcement.markdown |
|
|
|
'markdown': req.body.announcement !== null ? markdownAnnouncement : oldSettings.announcement.markdown, |
|
|
|
}, |
|
|
|
}, |
|
|
|
'allowedFileTypes': { |
|
|
|
'allowedFileTypes': { |
|
|
|
'animatedImage': req.body.files_allow_animated_image ? true : false, |
|
|
|
'animatedImage': booleanSetting(req.body.files_allow_animated_image), |
|
|
|
'image': req.body.files_allow_image ? true : false, |
|
|
|
'image': booleanSetting(req.body.files_allow_image), |
|
|
|
'video': req.body.files_allow_video ? true : false, |
|
|
|
'video': booleanSetting(req.body.files_allow_video), |
|
|
|
'audio': req.body.files_allow_audio ? true : false, |
|
|
|
'audio': booleanSetting(req.body.files_allow_audio), |
|
|
|
}, |
|
|
|
}, |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
@ -134,10 +144,20 @@ module.exports = async (req, res, next) => { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (newSettings.captchaMode > oldSettings.captchaMode) { |
|
|
|
if (newSettings.captchaMode > oldSettings.captchaMode) { |
|
|
|
|
|
|
|
if (oldSettings.captchaMode === 0) { |
|
|
|
|
|
|
|
rebuildBoard = true; |
|
|
|
|
|
|
|
rebuildCatalog = true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (newSettings.captchaMode === 2) { |
|
|
|
|
|
|
|
rebuildThreads = true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} else if (newSettings.captchaMode < oldSettings.captchaMode) { |
|
|
|
|
|
|
|
if (oldSettings.captchaMode === 2) { |
|
|
|
|
|
|
|
rebuildThreads = true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (newSettings.captchaMode === 0) { |
|
|
|
rebuildBoard = true; |
|
|
|
rebuildBoard = true; |
|
|
|
rebuildCatalog = true; //post form now on catalog page
|
|
|
|
rebuildCatalog = true; |
|
|
|
if (newSettings.captchaMode == 2) { |
|
|
|
|
|
|
|
rebuildThreads = true; //thread captcha enabled, removes threads
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -159,7 +179,8 @@ module.exports = async (req, res, next) => { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (newSettings.theme !== oldSettings.theme |
|
|
|
if (newSettings.theme !== oldSettings.theme |
|
|
|
|| newSettings.codeTheme !== oldSettings.codeTheme) { |
|
|
|
|| newSettings.codeTheme !== oldSettings.codeTheme |
|
|
|
|
|
|
|
|| newSettings.announcement.raw !== oldSettings.announcement.raw) { |
|
|
|
rebuildThreads = true; |
|
|
|
rebuildThreads = true; |
|
|
|
rebuildBoard = true; |
|
|
|
rebuildBoard = true; |
|
|
|
rebuildCatalog = true; |
|
|
|
rebuildCatalog = true; |
|
|
|