import { Box, Button, CssBaseline, Paper, Stack, TextField, Typography } from '@mui/material' import { getName } from 'services/whiteLabel' import { useState } from 'react' import axios from 'axios' export type LocalAuthPlaceholderReason = 'unconfigured' | 'insecure_origin' interface Props { reason?: LocalAuthPlaceholderReason setToken?: (token: string) => void } export default function LocalAuthPlaceholder(props: Props) { const { reason = 'unconfigured', setToken } = props const productName = getName() const [mode, setMode] = useState<'login' | 'signup'>('login') const [email, setEmail] = useState('') const [password, setPassword] = useState('') const [name, setName] = useState('') const [error, setError] = useState('') const [loading, setLoading] = useState(false) const apiUrl = import.meta.env.VITE_APP_API_URL const handleSignup = async () => { setError('') setLoading(true) try { const resp = await axios.post(`${apiUrl}/local-auth/signup`, { email, password, name }) const token = resp.data.token if (token && setToken) { localStorage.setItem('local_auth_token', token) setToken(token) } } catch (err: any) { setError(err.response?.data?.error || 'Signup failed') } finally { setLoading(false) } } const handleLogin = async () => { setError('') setLoading(true) try { const resp = await axios.post(`${apiUrl}/local-auth/login`, { email, password }) const token = resp.data.token if (token && setToken) { localStorage.setItem('local_auth_token', token) setToken(token) } } catch (err: any) { setError(err.response?.data?.error || 'Login failed') } finally { setLoading(false) } } const handleSubmit = (e: React.FormEvent) => { e.preventDefault() if (mode === 'signup') { handleSignup() } else { handleLogin() } } const explanation = reason === 'insecure_origin' ? 'This URL is not a secure context for cloud sign-in. Use local account sign-in instead.' : 'Local account sign-in for this deployment.' return ( <>
{productName} {explanation} {mode === 'signup' && ( setName(e.target.value)} fullWidth /> )} setEmail(e.target.value)} required fullWidth /> setPassword(e.target.value)} required fullWidth /> {error && ( {error} )}
) }