//TODO: add helpers for different checks, passing name, min/max and return true with error if hit
consterrors=awaitcheckSchema([
if(req.body.description&&
{result:lengthBody(req.body.description,0,globalLimits.fieldLength.description),expected:false,error:`Board description must be ${globalLimits.fieldLength.description} characters or less`},
(req.body.description.length<1||
{result:lengthBody(req.body.announcements,0,5000),expected:false,error:'Board announcements must be 5000 characters or less'},
{result:lengthBody(req.body.tags,0,2000),expected:false,error:'Tags length must be 2000 characters or less'},
errors.push(`Board description must be 1-${globalLimits.fieldLength.description} characters`);
{result:lengthBody(req.body.filters,0,2000),expected:false,error:'Filters length must be 2000 characters or less'},
}
{result:lengthBody(req.body.custom_css,0,globalLimits.customCss.max),expected:false,error:`Custom CSS must be ${globalLimits.customCss.max} characters or less`},
{result:arrayInBody(globalLimits.customCss.filters,req.body.custom_css),permLevel:1,expected:false,error:`Custom CSS strict mode is enabled and does not allow the following: "${globalLimits.customCss.filters.join('", "')}"`},
errors.push('Board announcements must be 1-2000 characters');
{result:lengthBody(req.body.moderators,0,500),expected:false,error:'Moderators length must be 500 characters orless'},
}
{result:lengthBody(req.body.name,1,globalLimits.fieldLength.boardname),expected:false,error:`Board name must be 1-${globalLimits.fieldLength.boardname} characters`},
if(req.body.tags&&req.body.tags.length>2000){
{result:lengthBody(req.body.default_name,0,50),expected:false,error:'Anon name must be 50 characters or less'},
errors.push('Tags length must be 2000 characters or less');
{result:numberBody(req.body.reply_limit,globalLimits.replyLimit.min,globalLimits.replyLimit.max),expected:true,error:`Reply Limit must be ${globalLimits.replyLimit.min}-${globalLimits.replyLimit.max}`},
}
{result:numberBody(req.body.bump_limit,globalLimits.bumpLimit.min,globalLimits.bumpLimit.max),expected:true,error:`Bump Limit must be ${globalLimits.bumpLimit.min}-${globalLimits.bumpLimit.max}`},
{result:numberBody(req.body.thread_limit,globalLimits.threadLimit.min,globalLimits.threadLimit.max),expected:true,error:`Threads Limit must be ${globalLimits.threadLimit.min}-${globalLimits.threadLimit.max}`},
errors.push('Filters length must be 2000 characters or less');
{result:numberBody(req.body.max_files,0,globalLimits.postFiles.max),expected:true,error:`Max files must be 0-${globalLimits.postFiles.max}`},
}
{result:minmaxBody(req.body.min_thread_message_length,req.body.max_thread_message_length),expected:true,error:'Min and max thread message lengths must not violate eachother'},
{result:minmaxBody(req.body.min_reply_message_length,req.body.max_reply_message_length),expected:true,error:'Min and max reply message lengths must not violate eachother'},
error:`Min thread message length must be 0-${globalLimits.fieldLength.message} and not more than "Max Thread Message Length" (currently ${res.locals.board.settings.maxThreadMessageLength})`},
error:`Min reply message length must be 0-${globalLimits.fieldLength.message} and not more than "Max Reply Message Length" (currently ${res.locals.board.settings.maxReplyMessageLength})`},
errors.push('Moderators length must be 500 characters orless');
error:`Max thread message length must be 0-${globalLimits.fieldLength.message} and not less than "Min Thread Message Length" (currently ${res.locals.board.settings.minThreadMessageLength})`},
error:`Max reply message length must be 0-${globalLimits.fieldLength.message} and not less than "Min Reply Message Length" (currently ${res.locals.board.settings.minReplyMessageLength})`},
errors.push(`Min thread message length must be 0-${globalLimits.fieldLength.message} and not more than "Max Thread Message Length" (currently ${res.locals.board.settings.maxThreadMessageLength})`);
errors.push(`Min reply message length must be 0-${globalLimits.fieldLength.message} and not more than "Max Reply Message Length" (currently ${res.locals.board.settings.maxReplyMessageLength})`);
errors.push(`Max thread message length must be 0-${globalLimits.fieldLength.message} and not less than "Min Thread Message Length" (currently ${res.locals.board.settings.minThreadMessageLength})`);
errors.push(`Max reply message length must be 0-${globalLimits.fieldLength.message} and not less than "Min Reply Message Length" (currently ${res.locals.board.settings.minReplyMessageLength})`);
errors.push(`Too many files. Max files per post ${res.locals.board.settings.maxFiles<globalLimits.postFiles.max?'on this board ':''}is ${res.locals.board.settings.maxFiles}`);
}
// check file, subject and message enforcement according to board settings
&&res.locals.numFiles>0),expected:false,error:`Posting files through anonymizers has been disabled ${disableAnonymizerFilePosting?'globally':'on this board'}`},
{result:res.locals.numFiles>res.locals.board.settings.maxFiles,blocking:true,permLevel:1,expected:true,error:`Too many files. Max files per post ${res.locals.board.settings.maxFiles<globalLimits.postFiles.max?'on this board ':''}is ${res.locals.board.settings.maxFiles}`},
errors.push(`Name must be ${globalLimits.fieldLength.name} characters or less`);
&&res.locals.board.settings.forceReplyMessage),expected:false,error:'Replies must include a message'},
errors.push(`Email must be ${globalLimits.fieldLength.email} characters or less`);
{result:hasNoMandatoryFile&&!existsBody(req.body.thread)&&res.locals.board.settings.forceThreadFile,expected:false,error:'Threads must include a file'},
}
{result:hasNoMandatoryFile&&existsBody(req.body.thread)&&res.locals.board.settings.forceReplyFile,expected:false,error:'Replies must include a file'},
{result:lengthBody(req.body.message,0,globalLimits.fieldLength.message),expected:false,blocking:true,error:`Message must be ${globalLimits.fieldLength.message} characters or less`},
expected:false,error:`Reply messages must be ${res.locals.board.settings.minReplyMessageLength}-${res.locals.board.settings.maxReplyMessageLength} characters`},
expected:false,error:`Thread messages must be ${res.locals.board.settings.minThreadMessageLength}-${res.locals.board.settings.maxThreadMessageLength} characters`},
{result:lengthBody(req.body.postpassword,0,globalLimits.fieldLength.postpassword),expected:false,error:`Password must be ${globalLimits.fieldLength.postpassword} characters or less`},
{result:lengthBody(req.body.name,0,globalLimits.fieldLength.name),expected:false,error:`Password must be ${globalLimits.fieldLength.name} characters or less`},
{result:lengthBody(req.body.subject,0,globalLimits.fieldLength.subject),expected:false,error:`Password must be ${globalLimits.fieldLength.subject} characters or less`},
{result:lengthBody(req.body.email,0,globalLimits.fieldLength.email),expected:false,error:`Password must be ${globalLimits.fieldLength.email} characters or less`},