@ -3,120 +3,67 @@
const { debugLogs } = require ( _ _dirname + '/../configs/secrets.js' )
const { debugLogs } = require ( _ _dirname + '/../configs/secrets.js' )
, dynamicResponse = require ( _ _dirname + '/dynamic.js' )
, dynamicResponse = require ( _ _dirname + '/dynamic.js' )
, { addCallback } = require ( _ _dirname + '/../redis.js' )
, { addCallback } = require ( _ _dirname + '/../redis.js' )
, upload = require ( 'express-fileupload' ) ;
, upload = require ( 'express-fileupload' )
, fileHandlers = { }
let postFiles ,
, fileSizeLimitFunction = ( req , res , next ) => {
uploadLimitFunction ,
handleBannerFiles ,
handleFlagFiles ,
numFilesUploadLimitFunction ,
numFlagsUploadLimitFunction ,
numBannersUploadLimitFunction ;
const updateHandlers = ( ) => {
//this thing is kinda gross
const { globalLimits , filterFileNames , spaceFileNameReplacement } = require ( _ _dirname + '/../config.js' ) . get
uploadLimitFunction = ( req , res , next ) => {
return dynamicResponse ( req , res , 413 , 'message' , {
return dynamicResponse ( req , res , 413 , 'message' , {
'title' : 'Payload Too Large' ,
'title' : 'Payload Too Large' ,
'message' : 'Your upload was too large' ,
'message' : 'Your upload was too large' ,
'redirect' : req . headers . referer
'redirect' : req . headers . referer
} ) ;
} ) ;
} ;
}
numFilesUploadLimitFunction = ( req , res , next ) => {
, updateHandlers = ( ) => {
return dynamicResponse ( req , res , 400 , 'message' , {
const { globalLimits , filterFileNames , spaceFileNameReplacement } = require ( _ _dirname + '/../config.js' ) . get ;
'title' : 'Too many files' ,
[ 'flag' , 'banner' , 'post' ] . forEach ( fileType => {
'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 } `
//one day this will be more easy to extend
: ` 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.
const fileSizeLimit = globalLimits [ ` ${ fileType } FilesSize ` ] ;
'redirect' : req . headers . referer
const fileNumLimit = globalLimits [ ` ${ fileType } Files ` ] ;
} ) ;
const fileNumLimitFunction = ( req , res , next ) => {
} ;
return dynamicResponse ( req , res , 400 , 'message' , {
numBannersUploadLimitFunction = ( req , res , next ) => {
'title' : 'Too many files' ,
return dynamicResponse ( req , res , 400 , 'message' , {
'message' : ( req . path . endsWith ( '/post' ) && res . locals . board ) ? ` Max files per post ${ res . locals . board . settings . maxFiles < globalLimits . postFiles . max ? 'on this board ' : '' } is ${ res . locals . board . settings . maxFiles } `
'title' : 'Too many files' ,
: ` Max files per request is ${ fileNumLimit . max } ` ,
'message' : ` Max banners per request is ${ globalLimits . bannerFiles . max } ` ,
'redirect' : req . headers . referer
'redirect' : req . headers . referer
} ) ;
} ) ;
} ;
} ;
fileHandlers [ fileType ] = upload ( {
numFlagsUploadLimitFunction = ( req , res , next ) => {
debug : debugLogs ,
return dynamicResponse ( req , res , 400 , 'message' , {
createParentPath : true ,
'title' : 'Too many files' ,
safeFileNames : filterFileNames ,
'message' : ` Max banners per request is ${ globalLimits . flagFiles . max } ` ,
spaceFileNameReplacement ,
'redirect' : req . headers . referer
preserveExtension : 4 ,
limits : {
totalSize : fileSizeLimit . max ,
fileSize : fileSizeLimit . max ,
files : fileNumLimit . max ,
} ,
numFilesLimitHandler : fileNumLimitFunction ,
limitHandler : fileSizeLimitFunction ,
useTempFiles : true ,
tempFileDir : _ _dirname + '/../tmp/'
} ) ;
module . exports [ fileType ] = fileHandlers [ fileType ] ;
} ) ;
} ) ;
} ;
} ;
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 ;
handleFlagFiles = upload ( {
debug : debugLogs ,
createParentPath : true ,
safeFileNames : filterFileNames ,
spaceFileNameReplacement ,
preserveExtension : 4 ,
limits : {
totalSize : globalLimits . flagFilesSize . max ,
fileSize : globalLimits . flagFilesSize . max ,
files : globalLimits . flagFiles . max
} ,
numFilesLimitHandler : numFlagsUploadLimitFunction ,
limitHandler : uploadLimitFunction ,
useTempFiles : true ,
tempFileDir : _ _dirname + '/../tmp/'
} ) ;
module . exports . handleFlagFiles = handleFlagFiles ;
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 ( ) ;
updateHandlers ( ) ;
addCallback ( 'config' , updateHandlers ) ;
addCallback ( 'config' , updateHandlers ) ;
module . exports = {
module . exports = {
handleBannerFiles ,
banner : fileHandlers . banner ,
handleFlagFiles ,
flag : fileHandlers . flag ,
posts : ( req , res , next ) => {
handlePostFilesEarlyTor : ( req , res , next ) => {
if ( res . locals . anonymizer ) {
if ( res . locals . anonymizer ) {
return postFiles ( req , res , next ) ;
return next ( ) ;
}
}
return nex t ( ) ;
return fileHandlers . post ( req , res , next ) ;
} ,
} ,
postsEarly : ( req , res , next ) => {
handlePostFiles : ( req , res , next ) => {
if ( res . locals . anonymizer ) {
if ( res . locals . anonymizer ) {
return nex t ( ) ;
return fileHandlers . post ( req , res , next ) ;
}
}
return postFiles ( req , res , next ) ;
return next ( ) ;
} ,
} ,
}
} ;