fix duplicate redirect logic

This commit is contained in:
Nate Kelley 2025-07-22 10:39:53 -06:00
parent 64cdf49d5b
commit 3680285cd9
No known key found for this signature in database
GPG Key ID: FD90372AB8D98B4F
1 changed files with 20 additions and 11 deletions

View File

@ -8,28 +8,37 @@ import {
isShareableAssetPage
} from '@/routes/busterRoutes';
/**
* Creates a login redirect URL with the current page as the 'next' parameter
*/
const createLoginRedirect = (request: NextRequest): NextResponse => {
const originalUrl = `${request.nextUrl.pathname}${request.nextUrl.search}`;
const loginUrl = new URL(createBusterRoute({ route: BusterRoutes.AUTH_LOGIN }), request.url);
loginUrl.searchParams.set('next', encodeURIComponent(originalUrl));
return NextResponse.redirect(loginUrl);
};
export const assetReroutes = async (
request: NextRequest,
response: NextResponse,
user: User | null
) => {
const userExists = !!user && !!user.id;
// If user doesn't exist and page requires authentication
if (!userExists && !isPublicPage(request)) {
const originalUrl = `${request.nextUrl.pathname}${request.nextUrl.search}`;
const loginUrl = new URL(createBusterRoute({ route: BusterRoutes.AUTH_LOGIN }), request.url);
loginUrl.searchParams.set('next', encodeURIComponent(originalUrl));
return NextResponse.redirect(loginUrl);
return createLoginRedirect(request);
}
// If user doesn't exist and it's a shareable asset page
if (!userExists && isShareableAssetPage(request)) {
const redirect = getEmbedAssetRedirect(request);
if (redirect) {
return NextResponse.redirect(new URL(redirect, request.url));
// Try to get embed asset redirect first
const embedRedirect = getEmbedAssetRedirect(request);
if (embedRedirect) {
return NextResponse.redirect(new URL(embedRedirect, request.url));
}
const originalUrl = `${request.nextUrl.pathname}${request.nextUrl.search}`;
const loginUrl = new URL(createBusterRoute({ route: BusterRoutes.AUTH_LOGIN }), request.url);
loginUrl.searchParams.set('next', encodeURIComponent(originalUrl));
return NextResponse.redirect(loginUrl);
// Fall back to login redirect
return createLoginRedirect(request);
}
return response;