aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--code/app/src/lib/i18n/en/index.ts2
-rw-r--r--code/app/src/lib/i18n/i18n-types.ts16
-rw-r--r--code/app/src/routes/(main)/(public)/reset-password/[id]/+page.svelte39
3 files changed, 26 insertions, 31 deletions
diff --git a/code/app/src/lib/i18n/en/index.ts b/code/app/src/lib/i18n/en/index.ts
index b9cdae7..fbf5423 100644
--- a/code/app/src/lib/i18n/en/index.ts
+++ b/code/app/src/lib/i18n/en/index.ts
@@ -46,6 +46,8 @@ const en: BaseTranslation = {
expired: "Expired",
requestHasExpired: "Your request has expired",
requestANewReset: "Request a new reset",
+ invalidRequestTitle: "Your request is invalid",
+ invalidRequestMessage: "This could be due to it being expired, nonexsistent or something else",
newPassword: "New password",
requestSentMessage: "If we find your email address in our systems, you will receive an email with instructions on how to set a new password for your account.",
requestAPasswordReset: "Request a password reset",
diff --git a/code/app/src/lib/i18n/i18n-types.ts b/code/app/src/lib/i18n/i18n-types.ts
index 870bf23..cf968d7 100644
--- a/code/app/src/lib/i18n/i18n-types.ts
+++ b/code/app/src/lib/i18n/i18n-types.ts
@@ -181,6 +181,14 @@ type RootTranslation = {
*/
requestANewReset: string
/**
+ * Y​o​u​r​ ​r​e​q​u​e​s​t​ ​i​s​ ​i​n​v​a​l​i​d
+ */
+ invalidRequestTitle: string
+ /**
+ * T​h​i​s​ ​c​o​u​l​d​ ​b​e​ ​d​u​e​ ​t​o​ ​i​t​ ​b​e​i​n​g​ ​e​x​p​i​r​e​d​,​ ​n​o​n​e​x​s​i​s​t​e​n​t​ ​o​r​ ​s​o​m​e​t​h​i​n​g​ ​e​l​s​e
+ */
+ invalidRequestMessage: string
+ /**
* N​e​w​ ​p​a​s​s​w​o​r​d
*/
newPassword: string
@@ -382,6 +390,14 @@ export type TranslationFunctions = {
*/
requestANewReset: () => LocalizedString
/**
+ * Your request is invalid
+ */
+ invalidRequestTitle: () => LocalizedString
+ /**
+ * This could be due to it being expired, nonexsistent or something else
+ */
+ invalidRequestMessage: () => LocalizedString
+ /**
* New password
*/
newPassword: () => LocalizedString
diff --git a/code/app/src/routes/(main)/(public)/reset-password/[id]/+page.svelte b/code/app/src/routes/(main)/(public)/reset-password/[id]/+page.svelte
index 2026764..ba59a8f 100644
--- a/code/app/src/routes/(main)/(public)/reset-password/[id]/+page.svelte
+++ b/code/app/src/routes/(main)/(public)/reset-password/[id]/+page.svelte
@@ -8,7 +8,7 @@
import { PasswordResetService } from "$lib/services/password-reset-service";
export let data: PageServerData;
- const service = new PasswordResetService();
+ const passwordResets = new PasswordResetService();
const formData = {
newPassword: {
value: "",
@@ -16,15 +16,15 @@
},
};
- let errorState: undefined | "expired" | "404" | "unknown";
let finishedPreliminaryLoading = false;
let loading = false;
let canSubmit = true;
+ let requestIsInvalid = false;
async function submitFormAsync() {
if (!canSubmit) return;
loading = true;
- const request = await service.fulfill_request_async(data.resetRequestId, formData.newPassword.value);
+ const request = await passwordResets.fulfill_request_async(data.resetRequestId, formData.newPassword.value);
if (request.isFulfilled) {
goto("/sign-in?" + signInPageMessageQueryKey + "=" + SignInPageMessage.AFTER_PASSWORD_RESET);
} else if (request.knownProblem) {
@@ -33,20 +33,8 @@
}
onMount(async () => {
- errorState = undefined;
- const isValidRequest = await service.request_is_valid_async(data.resetRequestId);
- if (!isValidRequest.isValid) {
- errorState = "unknown";
- canSubmit = false;
- }
- if (isValidRequest.status === 404) {
- errorState = "404";
- canSubmit = false;
- }
- if (isValidRequest.ok && isValidRequest.data !== true) {
- errorState = "expired";
- canSubmit = false;
- }
+ const response = await passwordResets.request_is_valid_async(data.resetRequestId);
+ requestIsInvalid = !response.isValid;
finishedPreliminaryLoading = true;
});
</script>
@@ -68,29 +56,18 @@
<div class="mt-8 sm:mx-auto sm:w-full sm:max-w-md">
<div class="bg-white py-8 px-4 shadow sm:rounded-lg sm:px-10">
<form class="space-y-6" on:submit|preventDefault={submitFormAsync}>
- {#if errorState === "404"}
- <Alert title={$LL.notFound()} message={$LL.resetPasswordPage.requestNotFound()} />
- {:else if errorState === "expired"}
- <Alert
- title={$LL.resetPasswordPage.expired()}
- message={$LL.resetPasswordPage.requestHasExpired()}
- rightLinkHref="/reset-password"
- rightLinkText={$LL.resetPasswordPage.requestANewReset()}
- />
- {:else if errorState === "unknown"}
- <Alert title={$LL.unexpectedError()} message={$LL.tryAgainSoon()} />
+ {#if requestIsInvalid}
+ <Alert title={$LL.resetPasswordPage.invalidRequestTitle()} message={$LL.resetPasswordPage.invalidRequestMessage()} />
{/if}
-
<Input
id="password"
name="password"
type="password"
autocomplete="new-password"
required
- bind:value={formData.newPassword}
+ bind:value={formData.newPassword.value}
label={$LL.resetPasswordPage.newPassword()}
/>
-
<Button text={$LL.submit()} type="submit" {loading} fullWidth />
</form>
</div>