import { signIn } from 'next-auth/react' import styles from './login.module.css' import { Form, Input, SubmitButton } from '../components/form' import { useState } from 'react' import Alert from 'react-bootstrap/Alert' import { useRouter } from 'next/router' import { LightningAuthWithExplainer } from './lightning-auth' import NostrAuth from './nostr-auth' import LoginButton from './login-button' import { emailSchema } from '../lib/validate' export function EmailLoginForm ({ text, callbackUrl }) { return (
{ signIn('email', { email, callbackUrl }) }} > {text || 'Login'} with Email
) } const authErrorMessages = { OAuthSignin: 'Error constructing OAuth URL. Try again or choose a different method.', OAuthCallback: 'Error handling OAuth response. Try again or choose a different method.', OAuthCreateAccount: 'Could not create OAuth account. Try again or choose a different method.', EmailCreateAccount: 'Could not create Email account. Try again or choose a different method.', Callback: 'Error in callback handler. Try again or choose a different method.', OAuthAccountNotLinked: 'This auth method is linked to another account. To link to this account first unlink the other account.', EmailSignin: 'Failed to send email. Make sure you entered your email address correctly.', CredentialsSignin: 'Auth failed. Try again or choose a different method.', default: 'Auth failed. Try again or choose a different method.' } export function authErrorMessage (error) { return error && (authErrorMessages[error] ?? authErrorMessages.default) } export default function Login ({ providers, callbackUrl, error, text, Header, Footer }) { const [errorMessage, setErrorMessage] = useState(authErrorMessage(error)) const router = useRouter() if (router.query.type === 'lightning') { return } if (router.query.type === 'nostr') { return } return (
{Header &&
} {errorMessage && setErrorMessage(undefined)} dismissible >{errorMessage} } {providers && Object.values(providers).map(provider => { switch (provider.name) { case 'Email': return (
or
) case 'Lightning': case 'Slashtags': case 'Nostr': return ( { const { nodata, ...query } = router.query router.push({ pathname: router.pathname, query: { ...query, type: provider.name.toLowerCase() } }) }} text={`${text || 'Login'} with`} /> ) default: return ( signIn(provider.id, { callbackUrl })} text={`${text || 'Login'} with`} /> ) } })} {Footer &&
) }