diff options
| author | ivarlovlie <git@ivarlovlie.no> | 2022-11-26 15:24:04 +0100 |
|---|---|---|
| committer | ivarlovlie <git@ivarlovlie.no> | 2022-11-26 15:24:04 +0100 |
| commit | 5c69dacebaa9a330932dcbf54574093ec1b869f5 (patch) | |
| tree | e3752d30b1944878e80d754eaa33080a9db3abc5 /code/app/src | |
| parent | b4a8720f6ddb1fb8bf9ee41628982e704852e699 (diff) | |
| download | greatoffice-5c69dacebaa9a330932dcbf54574093ec1b869f5.tar.xz greatoffice-5c69dacebaa9a330932dcbf54574093ec1b869f5.zip | |
feat: Give general response if request is invalid
Diffstat (limited to 'code/app/src')
| -rw-r--r-- | code/app/src/lib/i18n/en/index.ts | 2 | ||||
| -rw-r--r-- | code/app/src/lib/i18n/i18n-types.ts | 16 | ||||
| -rw-r--r-- | code/app/src/routes/(main)/(public)/reset-password/[id]/+page.svelte | 39 |
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 /** + * Your request is invalid + */ + invalidRequestTitle: string + /** + * This could be due to it being expired, nonexsistent or something else + */ + invalidRequestMessage: string + /** * New password */ 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> |
