47 lines
1.2 KiB
TypeScript
47 lines
1.2 KiB
TypeScript
import FastifyCookie from '@fastify/cookie'
|
|
import FastifyMultipart from '@fastify/multipart'
|
|
import { FastifyAdapter } from '@nestjs/platform-fastify'
|
|
|
|
const app: FastifyAdapter = new FastifyAdapter({
|
|
trustProxy: true,
|
|
logger: false,
|
|
// forceCloseConnections: true,
|
|
})
|
|
export { app as fastifyApp }
|
|
|
|
app.register(FastifyMultipart, {
|
|
limits: {
|
|
fields: 10, // Max number of non-file fields
|
|
fileSize: 1024 * 1024 * 6, // limit size 6M
|
|
files: 5, // Max number of file fields
|
|
},
|
|
})
|
|
|
|
app.register(FastifyCookie, {
|
|
secret: 'cookie-secret', // 这个 secret 不太重要,不存鉴权相关,无关紧要
|
|
})
|
|
|
|
app.getInstance().addHook('onRequest', (request, reply, done) => {
|
|
// set undefined origin
|
|
const { origin } = request.headers
|
|
if (!origin)
|
|
request.headers.origin = request.headers.host
|
|
|
|
// forbidden php
|
|
|
|
const { url } = request
|
|
|
|
if (url.endsWith('.php')) {
|
|
reply.raw.statusMessage
|
|
= 'Eh. PHP is not support on this machine. Yep, I also think PHP is bestest programming language. But for me it is beyond my reach.'
|
|
|
|
return reply.code(418).send()
|
|
}
|
|
|
|
// skip favicon request
|
|
if (url.match(/favicon.ico$/) || url.match(/manifest.json$/))
|
|
return reply.code(204).send()
|
|
|
|
done()
|
|
})
|