From c01c40fe45a9198a94477c27070f9875c100f85a Mon Sep 17 00:00:00 2001 From: asterisk727 <59166650+asterisk727@users.noreply.github.com> Date: Mon, 28 Jul 2025 22:24:53 -0700 Subject: [PATCH] fix: bug fixes to password reset (INCOMPLETE) --- AquaNet/src/libs/i18n/en_ref.ts | 2 + AquaNet/src/libs/sdk.ts | 2 +- AquaNet/src/pages/Welcome.svelte | 68 +++++++++++++------ docs/api-v2.md | 14 +++- .../icu/samnyan/aqua/net/UserRegistrar.kt | 22 ++++-- .../icu/samnyan/aqua/net/components/Email.kt | 3 + .../db/40/V1000_42__add_reset_password.sql | 8 +++ src/main/resources/email/reset.html | 4 +- 8 files changed, 92 insertions(+), 31 deletions(-) create mode 100644 src/main/resources/db/40/V1000_42__add_reset_password.sql diff --git a/AquaNet/src/libs/i18n/en_ref.ts b/AquaNet/src/libs/i18n/en_ref.ts index 7fb75e88..2ce7368b 100644 --- a/AquaNet/src/libs/i18n/en_ref.ts +++ b/AquaNet/src/libs/i18n/en_ref.ts @@ -53,6 +53,8 @@ export const EN_REF_Welcome = { 'welcome.verify-state-0': 'You haven\'t verified your email. A verification email had been sent to your inbox less than a minute ago. Please check your inbox!', 'welcome.verify-state-1': 'You haven\'t verified your email. We\'ve already sent 3 emails over the last 24 hours so we\'ll not send another one. Please check your inbox!', 'welcome.verify-state-2': 'You haven\'t verified your email. We just sent you another verification email. Please check your inbox!', + 'welcome.reset-state-0': 'A reset email had been sent to your inbox less than a minute ago. Please check your inbox!', + 'welcome.reset-state-1': 'We\'ve already sent 3 emails over the last 24 hours so we\'ll not send another one. Please check your inbox!', 'welcome.verifying': 'Verifying your email... please wait.', 'welcome.verified': 'Your email has been verified! You can now log in now.', 'welcome.verification-failed': 'Verification failed: ${message}. Please try again.', diff --git a/AquaNet/src/libs/sdk.ts b/AquaNet/src/libs/sdk.ts index bb0b65d8..8cfe382c 100644 --- a/AquaNet/src/libs/sdk.ts +++ b/AquaNet/src/libs/sdk.ts @@ -167,7 +167,7 @@ async function resetPassword(user: { email: string, turnstile: string }) { return await post('api/v2/user/reset-password', user) } -async function changePassword(user: { code: string, password: string }) { +async function changePassword(user: { token: string, password: string }) { return await post('/api/v2/user/change-password', user) } diff --git a/AquaNet/src/pages/Welcome.svelte b/AquaNet/src/pages/Welcome.svelte index 4fa30b50..14ffc31a 100644 --- a/AquaNet/src/pages/Welcome.svelte +++ b/AquaNet/src/pages/Welcome.svelte @@ -20,20 +20,20 @@ let error = "" let verifyMsg = "" - let code = "" + let token = "" if (USER.isLoggedIn()) { window.location.href = "/home" } if (params.get('code')) { - code = params.get('code')! + token = params.get('code')! if (location.pathname === '/verify') { state = 'verify' verifyMsg = t("welcome.verifying") submitting = true // Send request to server - USER.confirmEmail(code) + USER.confirmEmail(token) .then(() => { verifyMsg = t('welcome.verified') submitting = false @@ -104,7 +104,7 @@ } else { error = e.message - submitting = false + submitting = false // unnecessary? see line 113, same for both reset functions turnstileReset() } }) @@ -121,6 +121,12 @@ return submitting = false } + if (TURNSTILE_SITE_KEY && turnstile === "") { + // Sleep for 100ms to allow Turnstile to finish + error = t("welcome.waiting-turnstile") + return setTimeout(resetPassword, 100) + } + // Send request to server await USER.resetPassword({ email, turnstile }) .then(() => { @@ -129,12 +135,22 @@ verifyMsg = t("welcome.reset-password-sent", { email }) }) .catch(e => { - error = e.message - submitting = false - turnstileReset() + if (e.message === "Reset request rejected - STATE_0") { + state = 'verify' + verifyMsg = t("welcome.reset-state-0") + } + else if (e.message === "Reset request rejected - STATE_1") { + state = 'verify' + verifyMsg = t("welcome.reset-state-1") + } + else { + error = e.message + submitting = false + turnstileReset() + } }) - submitting = false; + submitting = false } async function changePassword(): Promise { @@ -145,9 +161,10 @@ return submitting = false } - // Send request to server - await USER.changePassword({ code, password }) + // Send request to server + await USER.changePassword({ token, password }) .then(() => { + state = 'verify' verifyMsg = t("welcome.password-reset-done") }) .catch(e => { @@ -174,11 +191,13 @@ {#if error} {error} {/if} -
state = 'home'} on:keypress={() => state = 'home'} - role="button" tabindex="0" class="clickable"> - - {t('back')} -
+ {#if error != t("welcome.waiting-turnstile")} +
state = 'home'} on:keypress={() => state = 'home'} + role="button" tabindex="0" class="clickable"> + + {t('back')} +
+ {/if} {#if isSignup} {/if} @@ -191,7 +210,7 @@ {isSignup ? t('welcome.btn-signup') : t('welcome.btn-login')} {/if} - {#if !submitting} + {#if state === "login" && !submitting} {/if} {#if TURNSTILE_SITE_KEY} @@ -207,11 +226,13 @@ {#if error} {error} {/if} -
state = 'home'} on:keypress={() => state = 'home'} - role="button" tabindex="0" class="clickable"> - - {t('back')} -
+ {#if error != t("welcome.waiting-turnstile")} +
state = 'login'} on:keypress={() => state = 'login'} + role="button" tabindex="0" class="clickable"> + + {t('back')} +
+ {/if}