@opengis/fastify-table
Version:
core-plugins
55 lines (45 loc) • 1.51 kB
JavaScript
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;