mirror of
https://github.com/documenso/documenso.git
synced 2025-11-17 02:01:33 +10:00
fix: add preferred team middleware
This commit is contained in:
@ -1,14 +1,47 @@
|
||||
import { redirect } from 'react-router';
|
||||
|
||||
import { extractCookieFromHeaders } from '@documenso/auth/server/lib/utils/cookies';
|
||||
import { getOptionalSession } from '@documenso/auth/server/lib/utils/get-session';
|
||||
import { getTeams } from '@documenso/lib/server-only/team/get-teams';
|
||||
import { formatDocumentsPath } from '@documenso/lib/utils/teams';
|
||||
import { ZTeamUrlSchema } from '@documenso/trpc/server/team-router/schema';
|
||||
|
||||
import type { Route } from './+types/_index';
|
||||
|
||||
export async function loader({ request }: Route.LoaderArgs) {
|
||||
const { isAuthenticated } = await getOptionalSession(request);
|
||||
const session = await getOptionalSession(request);
|
||||
|
||||
if (isAuthenticated) {
|
||||
throw redirect('/documents');
|
||||
if (session.isAuthenticated) {
|
||||
const teamUrlCookie = extractCookieFromHeaders('preferred-team-url', request.headers);
|
||||
|
||||
const referrer = request.headers.get('referer');
|
||||
let isReferrerFromTeamUrl = false;
|
||||
|
||||
if (referrer) {
|
||||
const referrerUrl = new URL(referrer);
|
||||
|
||||
if (referrerUrl.pathname.startsWith('/t/')) {
|
||||
isReferrerFromTeamUrl = true;
|
||||
}
|
||||
}
|
||||
|
||||
const preferredTeamUrl =
|
||||
teamUrlCookie && ZTeamUrlSchema.safeParse(teamUrlCookie).success ? teamUrlCookie : undefined;
|
||||
|
||||
// Early return for no preferred team.
|
||||
if (!preferredTeamUrl || isReferrerFromTeamUrl) {
|
||||
throw redirect('/documents');
|
||||
}
|
||||
|
||||
const teams = await getTeams({ userId: session.user.id });
|
||||
|
||||
const currentTeam = teams.find((team) => team.url === preferredTeamUrl);
|
||||
|
||||
if (!currentTeam) {
|
||||
throw redirect('/documents');
|
||||
}
|
||||
|
||||
throw redirect(formatDocumentsPath(currentTeam.url));
|
||||
}
|
||||
|
||||
throw redirect('/signin');
|
||||
|
||||
Reference in New Issue
Block a user