import { Divider } from "@mui/joy"; import { Button } from "@usememos/mui"; import { useEffect, useState } from "react"; import { toast } from "react-hot-toast"; import { Link } from "react-router-dom"; import AuthFooter from "@/components/AuthFooter"; import PasswordSignInForm from "@/components/PasswordSignInForm"; import { identityProviderServiceClient } from "@/grpcweb"; import { absolutifyLink } from "@/helpers/utils"; import useCurrentUser from "@/hooks/useCurrentUser"; import { Routes } from "@/router"; import { extractIdentityProviderIdFromName } from "@/store/common"; import { workspaceStore } from "@/store/v2"; import { IdentityProvider, IdentityProvider_Type } from "@/types/proto/api/v1/idp_service"; import { useTranslate } from "@/utils/i18n"; const SignIn = () => { const t = useTranslate(); const currentUser = useCurrentUser(); const [identityProviderList, setIdentityProviderList] = useState([]); const workspaceGeneralSetting = workspaceStore.state.generalSetting; // Redirect to root page if already signed in. useEffect(() => { if (currentUser) { window.location.href = Routes.ROOT; } }, []); // Prepare identity provider list. useEffect(() => { const fetchIdentityProviderList = async () => { const { identityProviders } = await identityProviderServiceClient.listIdentityProviders({}); setIdentityProviderList(identityProviders); }; fetchIdentityProviderList(); }, []); const handleSignInWithIdentityProvider = async (identityProvider: IdentityProvider) => { const stateQueryParameter = `auth.signin.${identityProvider.title}-${extractIdentityProviderIdFromName(identityProvider.name)}`; if (identityProvider.type === IdentityProvider_Type.OAUTH2) { const redirectUri = absolutifyLink("/auth/callback"); const oauth2Config = identityProvider.config?.oauth2Config; if (!oauth2Config) { toast.error("Identity provider configuration is invalid."); return; } const authUrl = `${oauth2Config.authUrl}?client_id=${ oauth2Config.clientId }&redirect_uri=${redirectUri}&state=${stateQueryParameter}&response_type=code&scope=${encodeURIComponent( oauth2Config.scopes.join(" "), )}`; window.location.href = authUrl; } }; return (

{workspaceGeneralSetting.customProfile?.title || "Memos"}

{!workspaceGeneralSetting.disallowPasswordAuth ? ( ) : ( identityProviderList.length == 0 &&

Password auth is not allowed.

)} {!workspaceGeneralSetting.disallowUserRegistration && !workspaceGeneralSetting.disallowPasswordAuth && (

{t("auth.sign-up-tip")} {t("common.sign-up")}

)} {identityProviderList.length > 0 && ( <> {!workspaceGeneralSetting.disallowPasswordAuth && {t("common.or")}}
{identityProviderList.map((identityProvider) => ( ))}
)}
); }; export default SignIn;