* feat(auth): allow skipping forced recovery key download * refactor: move from session storage to cookie
37 lines
1.3 KiB
TypeScript
37 lines
1.3 KiB
TypeScript
import { createFileRoute } from "@tanstack/react-router";
|
|
import { createServerFn } from "@tanstack/react-start";
|
|
import { getRequestHeaders } from "@tanstack/react-start/server";
|
|
import { DownloadRecoveryKeyPage } from "~/client/modules/auth/routes/download-recovery-key";
|
|
import { auth } from "~/server/lib/auth";
|
|
import { userHasCredentialPassword } from "~/server/modules/auth/helpers";
|
|
|
|
const getRecoveryKeyUserState = createServerFn({ method: "GET" }).handler(async () => {
|
|
const headers = getRequestHeaders();
|
|
const session = await auth.api.getSession({ headers });
|
|
|
|
return {
|
|
hasCredentialPassword: session?.user ? await userHasCredentialPassword(session.user.id) : false,
|
|
userId: session?.user.id ?? null,
|
|
};
|
|
});
|
|
|
|
export const Route = createFileRoute("/(auth)/download-recovery-key")({
|
|
component: RouteComponent,
|
|
errorComponent: () => <div>Failed to load recovery key</div>,
|
|
loader: async () => getRecoveryKeyUserState(),
|
|
head: () => ({
|
|
meta: [
|
|
{ title: "Zerobyte - Download Recovery Key" },
|
|
{
|
|
name: "description",
|
|
content: "Download your backup recovery key to ensure you can restore your data.",
|
|
},
|
|
],
|
|
}),
|
|
});
|
|
|
|
function RouteComponent() {
|
|
const { hasCredentialPassword, userId } = Route.useLoaderData();
|
|
|
|
return <DownloadRecoveryKeyPage hasCredentialPassword={hasCredentialPassword} userId={userId} />;
|
|
}
|