"use client"; import React, { Suspense, useEffect, useState } from "react"; import { useSearchParams } from "next/navigation"; import { Card, Title, Text, TextInput, Callout, Button, Grid, Col, } from "@tremor/react"; import { RiAlarmWarningLine, RiCheckboxCircleLine } from "@remixicon/react"; import { invitationClaimCall, userUpdateUserCall, getOnboardingCredentials, claimOnboardingToken, getUiConfig, getProxyBaseUrl } from "@/components/networking"; import { jwtDecode } from "jwt-decode"; import { Form, Button as Button2, message } from "antd"; import { getCookie } from "@/utils/cookieUtils"; export default function Onboarding() { const [form] = Form.useForm(); const searchParams = useSearchParams()!; const token = getCookie('token'); const inviteID = searchParams.get("invitation_id"); const action = searchParams.get("action"); const [accessToken, setAccessToken] = useState(null); const [defaultUserEmail, setDefaultUserEmail] = useState(""); const [userEmail, setUserEmail] = useState(""); const [userID, setUserID] = useState(null); const [loginUrl, setLoginUrl] = useState(""); const [jwtToken, setJwtToken] = useState(""); const [getUiConfigLoading, setGetUiConfigLoading] = useState(true); useEffect(() => { getUiConfig().then((data) => { // get the information for constructing the proxy base url, and then set the token and auth loading console.log("ui config in onboarding.tsx:", data); setGetUiConfigLoading(false); }); }, []); useEffect(() => { if (!inviteID || getUiConfigLoading) { // wait for the ui config to be loaded return; } getOnboardingCredentials(inviteID).then((data) => { const login_url = data.login_url; console.log("login_url:", login_url); setLoginUrl(login_url); const token = data.token; const decoded = jwtDecode(token) as { [key: string]: any }; setJwtToken(token); console.log("decoded:", decoded); setAccessToken(decoded.key); console.log("decoded user email:", decoded.user_email); const user_email = decoded.user_email; setUserEmail(user_email); const user_id = decoded.user_id; setUserID(user_id); }); }, [inviteID, getUiConfigLoading]); const handleSubmit = (formValues: Record) => { console.log( "in handle submit. accessToken:", accessToken, "token:", jwtToken, "formValues:", formValues ); if (!accessToken || !jwtToken) { return; } formValues.user_email = userEmail; if (!userID || !inviteID) { return; } claimOnboardingToken( accessToken, inviteID, userID, formValues.password ).then((data) => { let litellm_dashboard_ui = "/ui/"; litellm_dashboard_ui += "?login=success"; // set cookie "token" to jwtToken document.cookie = "token=" + jwtToken; console.log("redirecting to:", litellm_dashboard_ui); const proxyBaseUrl = getProxyBaseUrl(); console.log("proxyBaseUrl:", proxyBaseUrl); if (proxyBaseUrl) { window.location.href = proxyBaseUrl + litellm_dashboard_ui; } else { window.location.href = litellm_dashboard_ui; } }); // redirect to login page }; return (
🚅 LiteLLM {action === "reset_password" ? "Reset Password" : "Sign up"} {action === "reset_password" ? "Reset your password to access Admin UI." : "Claim your user account to login to Admin UI."} {action !== "reset_password" && ( SSO is under the Enterprise Tier. )}
<>
{action === "reset_password" ? "Reset Password" : "Sign Up"}
); }