import { Button, Heading, Image, Input, Text, VStack } from "@hope-ui/solid" import { createSignal, Show } from "solid-js" import { MaybeLoading } from "~/components" import { useRouter, useFetch, useT } from "~/hooks" import { setMe, me, getMainColor } from "~/store" import { PEmptyResp, PResp } from "~/types" import { handleResp, handleRespWithNotifySuccess, notify, r } from "~/utils" interface Generate2FA { qr: string secret: string } const TwoFA = () => { const { back } = useRouter() const [generateLoading, generate] = useFetch( (): PResp => r.post("/auth/2fa/generate"), ) const t = useT() const [otpData, setOtpData] = createSignal() const init = async () => { if (me().otp) { notify.warning(t("users.2fa_already_enabled")) back() return } const resp = await generate() handleResp(resp, setOtpData) } const [code, setCode] = createSignal("") init() const [verifyLoadind, verify] = useFetch( (): PEmptyResp => r.post("/auth/2fa/verify", { code: code(), secret: otpData()?.secret, }), ) const verify2FA = async () => { const resp = await verify() handleRespWithNotifySuccess(resp, () => { setMe({ ...me(), otp: true }) back() }) } return ( {t("users.scan_qr")} {t("users.or_manual")}:{" "} {otpData()?.secret} setCode(e.currentTarget.value)} onKeyDown={(e) => { if (e.key === "Enter") { verify2FA() } }} /> ) } export default TwoFA