'use strict' ;
const appealBans = require ( _ _dirname + '/../../models/forms/appeal.js' )
, config = require ( _ _dirname + '/../../lib/misc/config.js' )
, dynamicResponse = require ( _ _dirname + '/../../lib/misc/dynamic.js' )
, paramConverter = require ( _ _dirname + '/../../lib/middleware/input/paramconverter.js' )
, { checkSchema , numberBody , existsBody } = require ( _ _dirname + '/../../lib/input/schema.js' ) ;
module . exports = {
paramConverter : paramConverter ( {
trimFields : [ 'message' ] ,
allowedArrays : [ 'checkedbans' ] ,
processMessageLength : true ,
objectIdArrays : [ 'checkedbans' ]
} ) ,
controller : async ( req , res , next ) => {
const { globalLimits } = config . get ;
const errors = await checkSchema ( [
{ result : existsBody ( req . body . message ) , expected : true , error : 'Appeals must include a message' } ,
{ result : existsBody ( req . body . checkedbans ) , expected : true , error : 'Must select at least one ban to appeal' } ,
{ result : numberBody ( res . locals . messageLength , 0 , globalLimits . fieldLength . message ) , expected : true , error : ` Appeal message must be ${ globalLimits . fieldLength . message } characters or less ` } ,
] ) ; //should appeals really be based off message field length global limit? minor.
if ( errors . length > 0 ) {
return dynamicResponse ( req , res , 400 , 'message' , {
'title' : 'Bad request' ,
'errors' : errors ,
'redirect' : '/'
} ) ;
}
let amount = 0 ;
try {
amount = await appealBans ( req , res , next ) ;
} catch ( err ) {
return next ( err ) ;
}
if ( amount === 0 ) {
/ * t h i s c a n o c c u r i f t h e y s e l e c t e d i n v a l i d i d , n o n - i p m a t c h , a l r e a d y a p p e a l e d , o r u n a p p e a l a b l e b a n s . p r e v e n t e d b y d a t a b s e f i l t e r , s o w e u s e
use the updatedCount return value to check if any appeals were made successfully . if not , we end up here . * /
return dynamicResponse ( req , res , 400 , 'message' , {
'title' : 'Bad request' ,
'error' : 'Invalid bans selected' ,
'redirect' : '/'
} ) ;
}
return dynamicResponse ( req , res , 200 , 'message' , {
'title' : 'Success' ,
'message' : ` Appealed ${ amount } bans successfully ` ,
'redirect' : '/'
} ) ;
}
} ;