61 lines
1.8 KiB
TypeScript
61 lines
1.8 KiB
TypeScript
import { GetServerSidePropsContext } from "next";
|
|
import { serverSideTranslations } from "next-i18next/serverSideTranslations";
|
|
import React from "react";
|
|
|
|
import { getSession } from "@lib/auth";
|
|
import { getOrSetUserLocaleFromHeaders } from "@lib/core/i18n/i18n.utils";
|
|
import { useLocale } from "@lib/hooks/useLocale";
|
|
import prisma from "@lib/prisma";
|
|
import { inferSSRProps } from "@lib/types/inferSSRProps";
|
|
|
|
import SettingsShell from "@components/SettingsShell";
|
|
import Shell from "@components/Shell";
|
|
import ChangePasswordSection from "@components/security/ChangePasswordSection";
|
|
import TwoFactorAuthSection from "@components/security/TwoFactorAuthSection";
|
|
|
|
export default function Security({ user }: inferSSRProps<typeof getServerSideProps>) {
|
|
const { t } = useLocale();
|
|
return (
|
|
<Shell heading={t("security")} subtitle={t("manage_account_security")}>
|
|
<SettingsShell>
|
|
<ChangePasswordSection />
|
|
<TwoFactorAuthSection twoFactorEnabled={user.twoFactorEnabled} />
|
|
</SettingsShell>
|
|
</Shell>
|
|
);
|
|
}
|
|
|
|
export async function getServerSideProps(context: GetServerSidePropsContext) {
|
|
const session = await getSession(context);
|
|
const locale = await getOrSetUserLocaleFromHeaders(context.req);
|
|
|
|
if (!session?.user?.id) {
|
|
return { redirect: { permanent: false, destination: "/auth/login" } };
|
|
}
|
|
|
|
const user = await prisma.user.findFirst({
|
|
where: {
|
|
id: session.user.id,
|
|
},
|
|
select: {
|
|
id: true,
|
|
username: true,
|
|
name: true,
|
|
twoFactorEnabled: true,
|
|
},
|
|
});
|
|
|
|
if (!user) {
|
|
return { redirect: { permanent: false, destination: "/auth/login" } };
|
|
}
|
|
|
|
return {
|
|
props: {
|
|
localeProp: locale,
|
|
session,
|
|
user,
|
|
...(await serverSideTranslations(locale, ["common"])),
|
|
},
|
|
};
|
|
}
|