UNPKG

@opengis/fastify-table

Version:

core-plugins

55 lines (45 loc) 1.51 kB
import pgClients from './pgClients.js'; import getPGAsync from './funcs/getPGAsync.js'; import logger from '../logger/getLogger.js'; function close() { Object.keys(pgClients).forEach((el) => { pgClients[el].end(); }); } async function getHeadersPG(req, config) { if (!req.headers?.token) return null; const validToken = (req.ip === '193.239.152.181' || req.ip === '127.0.0.1' || req.ip.startsWith('192.168.') || config.debug ) && req.headers?.token && config.auth?.tokens?.includes?.(req.headers.token); if (validToken && req.headers?.db) { const pg = pgClients[req.headers.db] || await getPGAsync(req.headers.db); return pg; } return null; } async function plugin(fastify, config) { const client = await getPGAsync({ ...config.pg || {}, name: 'client' }); fastify.addHook('onRequest', async (req) => { const headersPG = await getHeadersPG(req, config); req.pg = headersPG || req.pg || client; if (headersPG) { req.user = { uid: req.headers?.uid }; req.folder = config.folder; req.root = config.root; } }); fastify.addHook('onError', async (req, reply, err) => { if (err.message === 'canceling statement due to statement timeout') { logger.file('timeout/request', { method: req.method, url: req.url, referer: req.headers?.referer, stack: err.stack, }); } }); fastify.addHook('onClose', close); } export default plugin;