Implement multi tenancy

This commit is contained in:
Sara
2023-10-27 11:26:00 +02:00
committed by Mathieu Virbel
parent 6bd5247bab
commit 4a69bffc9c
37 changed files with 409 additions and 236 deletions

View File

@@ -1,22 +1,50 @@
import type { NextRequest } from "next/server";
import { NextResponse, NextRequest } from "next/server";
import { get } from "@vercel/edge-config";
import { fiefAuth } from "./app/lib/fief";
import { FiefAuth, IUserInfoCache } from "@fief/fief/nextjs";
import { getFiefAuth, getFiefAuthMiddleware } from "./app/lib/fief";
let protectedPath: any = [];
if (process.env.NEXT_PUBLIC_FEAT_LOGIN_REQUIRED === "1") {
protectedPath = [
{
matcher: "/transcripts/((?!new).*)",
parameters: {},
},
{
matcher: "/browse",
parameters: {},
},
];
}
const authMiddleware = fiefAuth.middleware(protectedPath);
export async function middleware(request: NextRequest) {
return authMiddleware(request);
const domain = request.nextUrl.hostname;
const config = await get(domain);
if (!config) return NextResponse.error();
// Feature-flag protedted paths
if (
!config["features"]["browse"] &&
request.nextUrl.pathname.startsWith("/browse")
) {
return NextResponse.redirect(request.nextUrl.origin);
}
if (config["features"]["requireLogin"]) {
const fiefMiddleware = await getFiefAuthMiddleware(request.nextUrl);
const fiefResponse = fiefMiddleware(request);
if (
request.nextUrl.pathname == "/" ||
request.nextUrl.pathname.startsWith("/transcripts") ||
request.nextUrl.pathname.startsWith("/browse")
) {
// return fiefAuthMiddleware(domain, config['auth_callback_url'])(request, {rewrite: request.nextUrl.origin + "/" + domain + request.nextUrl.pathname})
const response = NextResponse.rewrite(
request.nextUrl.origin + "/" + domain + request.nextUrl.pathname,
);
// response = (await fiefResponse).headers
return response;
}
return fiefResponse;
}
if (
request.nextUrl.pathname == "/" ||
request.nextUrl.pathname.startsWith("/transcripts") ||
request.nextUrl.pathname.startsWith("/browse")
) {
return NextResponse.rewrite(
request.nextUrl.origin + "/" + domain + request.nextUrl.pathname,
);
}
return NextResponse.next();
}