From e758fbfe8f48a161bfb25a69708636cc88a03050 Mon Sep 17 00:00:00 2001 From: Lncvrt Date: Sun, 1 Feb 2026 16:36:04 -0700 Subject: [PATCH] Add register page --- src/app/account/register/page.tsx | 162 ++++++++++++++++++++++++ src/app/account/reset-password/page.tsx | 13 +- 2 files changed, 165 insertions(+), 10 deletions(-) create mode 100644 src/app/account/register/page.tsx diff --git a/src/app/account/register/page.tsx b/src/app/account/register/page.tsx new file mode 100644 index 0000000..6fb6ed0 --- /dev/null +++ b/src/app/account/register/page.tsx @@ -0,0 +1,162 @@ +'use client' + +import { Turnstile } from '@marsidev/react-turnstile' +import { DiscordButton } from '../../components/DiscordButton' +import { HomeButton } from '../../components/HomeButton' +import axios from 'axios' +import { getCookie } from '@/util/cookie' +import { useEffect, useState } from 'react' +import { useRouter } from 'next/navigation' + +export default function AccountRegisterPage () { + const [loading, setLoading] = useState(true) + const router = useRouter() + + const [token, setToken] = useState(null) + const [result, setResult] = useState(-1) + + const [username, setUsername] = useState('') + const [email, setEmail] = useState('') + const [retypeEmail, setRetypeEmail] = useState('') + const [password, setPassword] = useState('') + const [retypePassword, setRetypePassword] = useState('') + + useEffect(() => { + document.title = 'Lncvrt Games - Account Register' + + const token = getCookie('accountToken', '-1') + if (token !== '-1') { + router.push('/account') + } else setLoading(false) + }, []) + + return ( +
+ + +

+ {loading + ? 'Loading...' + : result == -1 + ? 'Verify you are human to register an account' + : 'Create a Lncvrt Games Account'} +

+ {!loading && ( + <> + {result == -1 ? ( + { + setToken(token) + setResult(0) + }} + onError={() => setResult(1)} + className='flex justify-center' + /> + ) : result == 0 ? ( +
{ + e.preventDefault() + + if (email !== retypeEmail) { + alert('Emails must match') + return + } + + if (password !== retypePassword) { + alert('Passwords must match') + return + } + + try { + const result = await axios.post('/api/account/register', { + token, + username, + email, + password + }) + if (result.data.success) { + router.push('/account/login') + } else { + alert( + 'Failed to register, error: ' + + (result.data.message || 'n/a') + ) + } + } catch (e: any) { + if (e.response) { + alert( + 'Failed to register, error: ' + + (e.response.data?.message || + JSON.stringify(e.response.data)) + ) + } else if (e.request) { + alert('Failed to register, no response from server.') + } else { + alert('Failed to register, error: ' + e.message) + } + } + }} + > + setUsername(e.target.value)} + required + /> + setEmail(e.target.value)} + required + /> + setRetypeEmail(e.target.value)} + required + /> + setPassword(e.target.value)} + required + /> + setRetypePassword(e.target.value)} + required + /> + +
+ ) : ( + result == 1 && ( +

+ {'Unable to verify captcha, please reload page.'} +

+ ) + )} + + )} +
+ ) +} diff --git a/src/app/account/reset-password/page.tsx b/src/app/account/reset-password/page.tsx index 3a4c835..8cae9e4 100644 --- a/src/app/account/reset-password/page.tsx +++ b/src/app/account/reset-password/page.tsx @@ -71,7 +71,7 @@ function ResetPasswordForm ({ codeParam }: { codeParam: string }) { } ) if (result.data.success) { - setResult(2) + router.push('/account/login') } else { alert( 'Failed to reset password, error: ' + @@ -116,19 +116,12 @@ function ResetPasswordForm ({ codeParam }: { codeParam: string }) { ) : ( - (result == 1 || result == 2) && ( + result == 1 && (

- {result == 1 - ? 'Unable to verify captcha, please reload page.' - : 'Password reset sucessfully'} + Unable to verify captcha, please reload page.

) )} - {result == 2 && ( -
- -
- )} )}