Redesign Menu
This commit is contained in:
41
src/server/tenant/service.ts
Normal file
41
src/server/tenant/service.ts
Normal file
@@ -0,0 +1,41 @@
|
||||
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";
|
||||
}
|
||||
Reference in New Issue
Block a user