Jonatan Nilsson
58553f3e34
Breaking: Renamed name to filename when listing files in folder. Breaking: Fixed the schema response for /media/resize. It is now consistent with other upload methods.
66 lines
1.8 KiB
JavaScript
66 lines
1.8 KiB
JavaScript
import { performance } from 'perf_hooks'
|
|
import { Flaska, QueryHandler } from 'flaska'
|
|
|
|
import TestRoutes from './test/routes.mjs'
|
|
import MediaRoutes from './media/routes.mjs'
|
|
|
|
import config from './config.mjs'
|
|
import log from './log.mjs'
|
|
|
|
const app = new Flaska({
|
|
log: log,
|
|
})
|
|
|
|
app.before(function(ctx) {
|
|
ctx.__started = performance.now()
|
|
ctx.log = ctx.log.child({
|
|
ip: ctx.req.headers['x-forwarded-for'] || ctx.req.connection.remoteAddress,
|
|
})
|
|
})
|
|
|
|
app.after(function(ctx) {
|
|
let ended = performance.now() - ctx.__started
|
|
let logger = ctx.log.info
|
|
if (ctx.status >= 400) {
|
|
logger = ctx.log.warn
|
|
}
|
|
logger.apply(ctx.log, [{
|
|
path: ctx.url,
|
|
status: ctx.status,
|
|
ms: Math.round(ended),
|
|
}, 'Request finished'])
|
|
})
|
|
|
|
app.onerror(function(err, ctx) {
|
|
if (err.status && err.status >= 400 && err.status < 500) {
|
|
ctx.log.warn(err.message)
|
|
} else {
|
|
ctx.log.error(err)
|
|
}
|
|
ctx.status = err.status || 500
|
|
ctx.body = {
|
|
status: ctx.status,
|
|
message: err.message,
|
|
}
|
|
})
|
|
|
|
const test = new TestRoutes()
|
|
app.get('/', test.static.bind(test))
|
|
app.get('/error', test.error.bind(test))
|
|
|
|
const media = new MediaRoutes()
|
|
media.init().then(function() {}, function(err) {
|
|
log.error(err, 'Error initing media')
|
|
})
|
|
app.get('/media', [QueryHandler()], media.listFiles.bind(media))
|
|
app.get('/media/:site', media.listPublicFiles.bind(media))
|
|
app.post('/media', [QueryHandler()], media.upload.bind(media))
|
|
app.post('/media/noprefix', [QueryHandler()], media.uploadNoPrefix.bind(media))
|
|
app.post('/media/resize', [QueryHandler()], media.resize.bind(media))
|
|
app.delete('/media/:filename', [QueryHandler()], media.remove.bind(media))
|
|
|
|
app.listen(config.get('server:port'), function(a,b) {
|
|
log.info(`Server listening at ${config.get('server:port')}`)
|
|
})
|
|
|
|
export default app
|