42 lines
1.3 KiB
TypeScript
42 lines
1.3 KiB
TypeScript
import {NextRequest} from "next/server";
|
|
|
|
function decodeB64Json(b64: string) {
|
|
try {
|
|
const s = b64.replace(/-/g, "+").replace(/_/g, "/");
|
|
const pad = s.length % 4 === 2 ? "=="
|
|
: s.length % 4 === 3 ? "="
|
|
: "";
|
|
const json = Buffer.from(s + pad, "base64").toString("utf8");
|
|
return JSON.parse(json);
|
|
} catch {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
export function resolveTenantFromRequest(req: NextRequest): string {
|
|
const ui = req.cookies.get("user_info")?.value;
|
|
if (ui) {
|
|
try {
|
|
const parsed = JSON.parse(Buffer.from(ui, "base64").toString("utf8"));
|
|
if (parsed?.tenantKey && typeof parsed.tenantKey === "string") return parsed.tenantKey;
|
|
} catch {
|
|
}
|
|
}
|
|
|
|
const access = req.cookies.get("access_token")?.value;
|
|
if (access && access.split(".").length >= 2) {
|
|
const payloadB64 = access.split(".")[1];
|
|
const payload = decodeB64Json(payloadB64);
|
|
const tk = payload?.tenant_key ?? payload?.tenantKey;
|
|
if (typeof tk === "string" && tk) return tk;
|
|
}
|
|
|
|
const host = req.headers.get("host") ?? "";
|
|
const parts = host.split(".");
|
|
if (parts.length >= 3) return parts[0];
|
|
|
|
if (process.env.DEFAULT_TENANT_KEY) return process.env.DEFAULT_TENANT_KEY;
|
|
|
|
return "default";
|
|
}
|