buster/apps/web/src/middleware/assetReroutes.ts

35 lines
938 B
TypeScript

import type { User } from '@supabase/supabase-js';
import { type NextRequest, NextResponse } from 'next/server';
import {
BusterRoutes,
createBusterRoute,
getEmbedAssetRedirect,
isPublicPage,
isShareableAssetPage
} from '@/routes/busterRoutes';
export const assetReroutes = async (
request: NextRequest,
response: NextResponse,
user: User | null
) => {
const userExists = !!user && !!user.id;
if (!userExists && !isPublicPage(request)) {
return NextResponse.redirect(
new URL(createBusterRoute({ route: BusterRoutes.AUTH_LOGIN }), request.url)
);
}
if (!userExists && isShareableAssetPage(request)) {
const redirect = getEmbedAssetRedirect(request);
if (redirect) {
return NextResponse.redirect(new URL(redirect, request.url));
}
return NextResponse.redirect(
new URL(createBusterRoute({ route: BusterRoutes.AUTH_LOGIN }), request.url)
);
}
return response;
};