45 lines
1.2 KiB
TypeScript
45 lines
1.2 KiB
TypeScript
import { FastifyInstance, FastifyRequest } from "fastify";
|
|
import fp from "fastify-plugin";
|
|
import { eq } from "drizzle-orm";
|
|
import { tenants } from "../../db/schema";
|
|
|
|
export default fp(async (server: FastifyInstance) => {
|
|
server.addHook("preHandler", async (req, reply) => {
|
|
const host = req.headers.host?.split(":")[0]; // Domain ohne Port
|
|
if (!host) {
|
|
reply.code(400).send({ error: "Missing host header" });
|
|
return;
|
|
}
|
|
// Tenant aus DB laden
|
|
const rows = await server.db
|
|
.select()
|
|
.from(tenants)
|
|
.where(eq(tenants.portalDomain, host))
|
|
.limit(1);
|
|
const tenant = rows[0];
|
|
|
|
|
|
if(!tenant) {
|
|
// Multi Tenant Mode
|
|
(req as any).tenant = null;
|
|
}else {
|
|
// Tenant ins Request-Objekt hängen
|
|
(req as any).tenant = tenant;
|
|
}
|
|
|
|
});
|
|
});
|
|
|
|
// Typ-Erweiterung
|
|
declare module "fastify" {
|
|
interface FastifyRequest {
|
|
tenant?: {
|
|
id: string;
|
|
name: string;
|
|
domain?: string;
|
|
subdomain?: string;
|
|
settings?: Record<string, any>;
|
|
};
|
|
}
|
|
}
|