'use strict' ;
const { debugLogs } = require ( _ _dirname + '/../configs/secrets.js' )
, dynamicResponse = require ( _ _dirname + '/dynamic.js' )
, { addCallback } = require ( _ _dirname + '/../redis.js' )
, upload = require ( 'express-fileupload' ) ;
let postFiles ,
uploadLimitFunction ,
handleBannerFiles ,
numFilesUploadLimitFunction ,
numBannersUploadLimitFunction ;
const updateHandlers = ( ) => {
const { globalLimits , filterFileNames , spaceFileNameReplacement } = require ( _ _dirname + '/../config.js' ) . get
uploadLimitFunction = ( req , res , next ) => {
return dynamicResponse ( req , res , 413 , 'message' , {
'title' : 'Payload Too Large' ,
'message' : 'Your upload was too large' ,
'redirect' : req . headers . referer
} ) ;
} ;
numFilesUploadLimitFunction = ( req , res , next ) => {
return dynamicResponse ( req , res , 400 , 'message' , {
'title' : 'Too many files' ,
'message' : res . locals . board ? ` Max files per post ${ res . locals . board . settings . maxFiles < globalLimits . postFiles . max ? 'on this board ' : '' } is ${ res . locals . board . settings . maxFiles } `
: ` Max files per request is ${ globalLimits . postFiles . max } ` , //because of difference in TOR body parsing, we dont populate res.locals.board at this point. something to address later.
'redirect' : req . headers . referer
} ) ;
} ;
numBannersUploadLimitFunction = ( req , res , next ) => {
return dynamicResponse ( req , res , 400 , 'message' , {
'title' : 'Too many files' ,
'message' : ` Max banners per request is ${ globalLimits . bannerFiles . max } ` ,
'redirect' : req . headers . referer
} ) ;
} ;
handleBannerFiles = upload ( {
debug : debugLogs ,
createParentPath : true ,
safeFileNames : filterFileNames ,
spaceFileNameReplacement ,
preserveExtension : 4 ,
limits : {
totalSize : globalLimits . bannerFilesSize . max ,
fileSize : globalLimits . bannerFilesSize . max ,
files : globalLimits . bannerFiles . max
} ,
numFilesLimitHandler : numBannersUploadLimitFunction ,
limitHandler : uploadLimitFunction ,
useTempFiles : true ,
tempFileDir : _ _dirname + '/../tmp/'
} ) ;
module . exports . handleBannerFiles = handleBannerFiles ;
postFiles = upload ( {
debug : debugLogs ,
createParentPath : true ,
safeFileNames : filterFileNames ,
spaceFileNameReplacement ,
preserveExtension : 4 ,
limits : {
totalSize : globalLimits . postFilesSize . max ,
fileSize : globalLimits . postFilesSize . max ,
files : globalLimits . postFiles . max
} ,
numFilesLimitHandler : numFilesUploadLimitFunction ,
limitHandler : uploadLimitFunction ,
useTempFiles : true ,
tempFileDir : _ _dirname + '/../tmp/'
} ) ;
} ;
updateHandlers ( ) ;
addCallback ( 'config' , updateHandlers ) ;
module . exports = {
handleBannerFiles ,
handlePostFilesEarlyTor : ( req , res , next ) => {
if ( res . locals . anonymizer ) {
return postFiles ( req , res , next ) ;
}
return next ( ) ;
} ,
handlePostFiles : ( req , res , next ) => {
if ( res . locals . anonymizer ) {
return next ( ) ;
}
return postFiles ( req , res , next ) ;
} ,
}