@opengis/fastify-table
Version:
core-plugins
52 lines (51 loc) • 1.81 kB
JavaScript
import config from "../../../config.js";
import pgClients from "./pgClients.js";
import getPGAsync from "./funcs/getPGAsync.js";
import logger from "../logger/getLogger.js";
function close() {
Object.keys(pgClients)
.filter((key) => !pgClients[key]?.ending && !pgClients[key]?.ended)
.forEach((key) => {
console.log("Closing pg client", key);
pgClients[key].end();
});
}
async function getHeadersPG(req) {
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 && typeof req.headers?.db === "string") {
const pg = pgClients[req.headers.db] || (await getPGAsync(req.headers.db));
return pg;
}
return null;
}
function plugin(fastify) {
fastify.addHook("onRequest", async (req) => {
const headersPG = await getHeadersPG(req);
const client = await getPGAsync({ ...(config.pg || {}), name: "client" });
req.pg = headersPG || req.pg || client || pgClients.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;