diff options
Diffstat (limited to 'apps/kit/src/routes/(main)/(public)')
7 files changed, 0 insertions, 490 deletions
diff --git a/apps/kit/src/routes/(main)/(public)/+layout.svelte b/apps/kit/src/routes/(main)/(public)/+layout.svelte deleted file mode 100644 index 69c29c5..0000000 --- a/apps/kit/src/routes/(main)/(public)/+layout.svelte +++ /dev/null @@ -1,18 +0,0 @@ -<script> - import LL from "$lib/i18n/i18n-svelte"; -</script> - -<slot /> -<footer - class="grid sm:gap-5 grid-flow-row sm:justify-center px-2 sm:grid-flow-col" -> - <a href="https://greatoffice.life/privacy" class="link"> - {$LL.privacyPolicy()} - </a> - <a href="https://greatoffice.life/tos" class="link"> - {$LL.tos()} - </a> - <a href="https://greatoffice.life/documentation" class="link"> - {$LL.documentation()} - </a> -</footer> diff --git a/apps/kit/src/routes/(main)/(public)/reset-password/+page.svelte b/apps/kit/src/routes/(main)/(public)/reset-password/+page.svelte deleted file mode 100644 index aa26892..0000000 --- a/apps/kit/src/routes/(main)/(public)/reset-password/+page.svelte +++ /dev/null @@ -1,82 +0,0 @@ -<script lang="ts"> - import { create_forgot_password_request } from "$lib/api/user"; - import { Alert, Input, Button } from "$lib/components"; - import LL from "$lib/i18n/i18n-svelte"; - import type { ErrorResult } from "$lib/models/ErrorResult"; - - const formData = { - email: "", - }; - - $: showErrorAlert = - (errorData?.text.length ?? 0 + errorData?.title.length ?? 0) > 0 && - !showSuccessAlert; - - const errorData = { - text: "", - title: "", - } as ErrorResult; - - let loading = false; - let showSuccessAlert = false; - - async function submitFormAsync() { - errorData.text = ""; - errorData.title = ""; - showSuccessAlert = false; - loading = true; - const request = await create_forgot_password_request(formData.email); - loading = false; - if (!request.ok) { - errorData.text = request.data.text ?? $LL.tryAgainSoon(); - errorData.title = request.data.title ?? $LL.unexpectedError(); - return; - } - showSuccessAlert = true; - } -</script> - -<div class="min-h-full flex flex-col justify-center py-12 sm:px-6 lg:px-8"> - <div class="sm:mx-auto sm:w-full p-2 sm:p-0 sm:max-w-md"> - <h2 class="mt-6 text-3xl tracking-tight font-bold text-gray-900"> - {$LL.resetPasswordPage.requestAPasswordReset()} - </h2> - <p class="mt-2 text-sm text-gray-600"> - {$LL.or().toLowerCase()} - <a href="/sign-in" class="link"> - {$LL.signIntoYourAccount().toLowerCase()} - </a> - </p> - </div> - - <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}> - <Alert - title={errorData.title} - message={errorData.text} - type="error" - visible={showErrorAlert} - /> - - <Alert - type="success" - title={$LL.success()} - message={$LL.resetPasswordPage.requestSentMessage()} - visible={showSuccessAlert} - /> - - <Input - id="email" - name="email" - type="email" - autocomplete="email" - required - bind:value={formData.email} - label={$LL.emailAddress()} - /> - <Button text={$LL.submit()} type="submit" {loading} fullWidth /> - </form> - </div> - </div> -</div> diff --git a/apps/kit/src/routes/(main)/(public)/reset-password/[id]/+page.server.ts b/apps/kit/src/routes/(main)/(public)/reset-password/[id]/+page.server.ts deleted file mode 100644 index 389d04c..0000000 --- a/apps/kit/src/routes/(main)/(public)/reset-password/[id]/+page.server.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { is_guid } from '$lib/helpers'; -import { redirect } from '@sveltejs/kit'; -import type { PageServerLoad } from './$types'; - -export const load: PageServerLoad = async ({ params }) => { - const resetRequestId = params.id ?? ""; - if (!is_guid(resetRequestId)) throw redirect(302, "/reset-password"); - return { - resetRequestId - }; -};
\ No newline at end of file diff --git a/apps/kit/src/routes/(main)/(public)/reset-password/[id]/+page.svelte b/apps/kit/src/routes/(main)/(public)/reset-password/[id]/+page.svelte deleted file mode 100644 index 562d902..0000000 --- a/apps/kit/src/routes/(main)/(public)/reset-password/[id]/+page.svelte +++ /dev/null @@ -1,132 +0,0 @@ -<script lang="ts"> - import { - check_forgot_password_request, - fulfill_forgot_password_request, - } from "$lib/api/user"; - import { onMount } from "svelte"; - import LL from "$lib/i18n/i18n-svelte"; - import { Alert, Input, Button } from "$lib/components"; - import type { PageServerData } from "./$types"; - import type { ErrorResult } from "$lib/models/ErrorResult"; - import { goto } from "$app/navigation"; - import { Message, messageQueryKey } from "../../sign-in/+page.svelte"; - - export let data: PageServerData; - - const formData = { - newPassword: "", - }; - - const errorData = { - text: "", - title: "", - } as ErrorResult; - - let errorState: undefined | "expired" | "404" | "unknown"; - - let finishedPreliminaryLoading = false; - let loading = false; - let canSubmit = true; - - async function submitFormAsync() { - if (!canSubmit) return; - loading = true; - const request = await fulfill_forgot_password_request( - data.resetRequestId, - formData.newPassword - ); - if (request.ok) { - goto( - "/sign-in?" + - messageQueryKey + - "=" + - Message.AFTER_PASSWORD_RESET - ); - } - - loading = false; - } - - onMount(async () => { - errorState = undefined; - const isValidRequest = await check_forgot_password_request( - data.resetRequestId - ); - if (!isValidRequest.ok && isValidRequest.status !== 404) { - errorState = "unknown"; - canSubmit = false; - } - if (isValidRequest.status === 404) { - errorState = "404"; - canSubmit = false; - } - if (isValidRequest.ok && isValidRequest.data !== true) { - errorState = "expired"; - canSubmit = false; - } - finishedPreliminaryLoading = true; - }); -</script> - -<div class="min-h-full flex flex-col justify-center py-12 sm:px-6 lg:px-8"> - {#if finishedPreliminaryLoading} - <div class="sm:mx-auto sm:w-full p-2 sm:p-0 sm:max-w-md"> - <h2 class="mt-6 text-3xl tracking-tight font-bold text-gray-900"> - {$LL.resetPasswordPage.setANewPassword()} - </h2> - <p class="mt-2 text-sm text-gray-600"> - {$LL.or().toLowerCase()} - <a href="/sign-in" class="link"> - {$LL.signIntoYourAccount().toLowerCase()} - </a> - </p> - </div> - - <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} - - <Input - id="password" - name="password" - type="password" - autocomplete="new-password" - required - bind:value={formData.newPassword} - label={$LL.resetPasswordPage.newPassword()} - /> - - <Button - text={$LL.submit()} - type="submit" - {loading} - fullWidth - /> - </form> - </div> - </div> - {:else} - <p>Checking your request...</p> - {/if} -</div> diff --git a/apps/kit/src/routes/(main)/(public)/sign-in/+page.svelte b/apps/kit/src/routes/(main)/(public)/sign-in/+page.svelte deleted file mode 100644 index 101b49d..0000000 --- a/apps/kit/src/routes/(main)/(public)/sign-in/+page.svelte +++ /dev/null @@ -1,153 +0,0 @@ -<script context="module" lang="ts"> - export enum Message { - AFTER_PASSWORD_RESET = "after-password-reset", - USER_INACTIVITY = "user-inactivity", - USER_DISABLED = "user-disabled", - } - export const messageQueryKey = "m"; - export const signInPageTestKeys = { - passwordInput: "password-input", - usernameInput: "username-input", - rememberMeCheckbox: "remember-me-checkbox", - signUpForm: "login-form", - userInactivityAlert: Message.USER_INACTIVITY + "-alert", - userDisabledAlert: Message.USER_DISABLED + "-alert", - afterPasswordResetAlert: Message.AFTER_PASSWORD_RESET + "-alert", - formErrorAlert: "form-error-alert", - resetPasswordAnchor: "reset-password-anchor", - signUpAnchor: "sign-up-anchor", - }; -</script> - -<script lang="ts"> - import { goto } from "$app/navigation"; - import { login } from "$lib/api/user"; - import { Button, Checkbox, Input, Alert } from "$lib/components"; - import LL from "$lib/i18n/i18n-svelte"; - import type { ErrorResult } from "$lib/models/ErrorResult"; - import type { LoginPayload } from "$lib/models/LoginPayload"; - import pwKey from "$actions/pwKey"; - import { onMount } from "svelte"; - - let loading = false; - let messageType: Message | undefined = undefined; - - const data = { - username: "", - password: "", - persist: true, - } as LoginPayload; - - let errorData = { - text: "", - title: "", - } as ErrorResult; - $: showErrorAlert = (errorData?.text.length ?? 0 + errorData?.title.length ?? 0) > 0; - - onMount(() => { - const searcher = new URLSearchParams(window.location.search); - if (searcher.get(messageQueryKey)) { - messageType = searcher.get(messageQueryKey) as Message; - searcher.delete(messageQueryKey); - history.replaceState(null, "", window.location.origin + window.location.pathname); - } - }); - - async function submitFormAsync() { - errorData = { text: "", title: "" }; - loading = true; - data.persist = !data.persist; - const loginResponse = await login(data); - if (loginResponse.ok) { - await goto("/home"); - } else { - errorData.title = loginResponse.data.title; - errorData.text = loginResponse.data.text; - } - loading = false; - } -</script> - -<div class="min-h-full flex flex-col justify-center py-12 sm:px-6 lg:px-8"> - {#if messageType} - <div class="sm:max-w-md sm:mx-auto sm:w-full"> - {#if messageType === "after-password-reset"} - <Alert - title={$LL.signInPage.yourNewPasswordIsApplied()} - _pwKey={signInPageTestKeys.afterPasswordResetAlert} - message={$LL.signInPage.signInBelow()} - closeable - /> - {:else if messageType === "user-disabled"} - <Alert - title={$LL.signInPage.yourAccountIsDisabled()} - _pwKey={signInPageTestKeys.userDisabledAlert} - message={$LL.signInPage.contactYourAdminIfDisabled()} - closeable - /> - {:else if messageType === "user-inactivity"} - <Alert - title={$LL.signInPage.youHaveReachedInactivityLimit()} - _pwKey={signInPageTestKeys.userInactivityAlert} - message={$LL.signInPage.feelFreeToSignInAgain()} - closeable - /> - {/if} - </div> - {/if} - <div class="sm:mx-auto sm:w-full p-2 sm:p-0 sm:max-w-md"> - <h2 class="mt-6 text-3xl tracking-tight font-bold text-gray-900"> - {$LL.signInPage.signIn()} - </h2> - <p class="mt-2 text-sm text-gray-600"> - {$LL.or().toLowerCase()} - <a href="/sign-up" use:pwKey={signInPageTestKeys.signUpAnchor} class="link">{$LL.createANewAccount().toLowerCase()}</a> - </p> - </div> - <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"> - {#if showErrorAlert} - <Alert title={errorData.title} message={errorData.text} type="error" _pwKey={signInPageTestKeys.formErrorAlert} /> - {/if} - <form class="space-y-6" use:pwKey={signInPageTestKeys.signUpForm} on:submit|preventDefault={submitFormAsync}> - <Input - id="username" - _pwKey={signInPageTestKeys.usernameInput} - name="username" - type="email" - label={$LL.emailAddress()} - required - bind:value={data.username} - /> - - <Input - id="password" - name="password" - type="password" - label={$LL.password()} - _pwKey={signInPageTestKeys.passwordInput} - autocomplete="current-password" - required - bind:value={data.password} - /> - - <div class="flex items-center justify-between"> - <Checkbox - id="remember-me" - _pwKey={signInPageTestKeys.rememberMeCheckbox} - name="remember-me" - bind:checked={data.persist} - label={$LL.signInPage.notMyComputer()} - /> - <div class="text-sm"> - <a href="/reset-password" class="link" use:pwKey={signInPageTestKeys.resetPasswordAnchor}> - {$LL.signInPage.resetPassword()} - </a> - </div> - </div> - - <Button text={$LL.submit()} fullWidth type="submit" {loading} /> - </form> - </div> - </div> -</div> diff --git a/apps/kit/src/routes/(main)/(public)/sign-in/test.ts b/apps/kit/src/routes/(main)/(public)/sign-in/test.ts deleted file mode 100644 index 27af2ea..0000000 --- a/apps/kit/src/routes/(main)/(public)/sign-in/test.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { get_test_context } from "$lib/configuration"; -import { get_element_by_pw_key } from "$lib/helpers"; -import { test, expect } from "@playwright/test"; -import { signInPageTestKeys } from "./+page.svelte"; - -const context = get_test_context(); - -test("form loads", async ({ page }) => { - await page.goto("/sign-up"); - const formElement = get_element_by_pw_key(signInPageTestKeys.signUpForm); - expect(formElement).toBeTruthy(); -});
\ No newline at end of file diff --git a/apps/kit/src/routes/(main)/(public)/sign-up/+page.svelte b/apps/kit/src/routes/(main)/(public)/sign-up/+page.svelte deleted file mode 100644 index 0dfa41a..0000000 --- a/apps/kit/src/routes/(main)/(public)/sign-up/+page.svelte +++ /dev/null @@ -1,82 +0,0 @@ -<script lang="ts"> - import { goto } from "$app/navigation"; - import { create_account } from "$lib/api/user"; - import { Button, Input, Alert } from "$lib/components"; - import LL from "$lib/i18n/i18n-svelte"; - import type { CreateAccountPayload } from "$lib/models/CreateAccountPayload"; - import type { ErrorResult } from "$lib/models/ErrorResult"; - - const formData = { - username: "", - password: "", - } as CreateAccountPayload; - - const errorData = { - text: "", - title: "", - } as ErrorResult; - let loading = false; - $: showErrorAlert = - (errorData?.text.length ?? 0 + errorData?.title.length ?? 0) > 0; - - async function submitFormAsync() { - loading = true; - errorData.text = ""; - errorData.title = ""; - const response = await create_account(formData); - loading = false; - if (response.ok) { - await goto("/home"); - return; - } - errorData.title = response.data?.title ?? $LL.unexpectedError(); - errorData.text = response.data?.text ?? $LL.tryAgainSoon(); - } -</script> - -<div class="min-h-full flex flex-col justify-center py-12 sm:px-6 lg:px-8"> - <div class="sm:mx-auto sm:w-full p-2 sm:p-0 sm:max-w-md"> - <h2 class="mt-6 text-3xl tracking-tight font-bold text-gray-900"> - {$LL.signUpPage.createYourNewAccount()} - </h2> - <p class="mt-2 text-sm text-gray-600"> - {$LL.or().toLowerCase()} - <a href="/sign-in" class="link"> - {$LL.signIntoYourAccount().toLowerCase()} - </a> - </p> - </div> - - <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"> - <Alert - title={errorData.title} - message={errorData.text} - type="error" - class="mb-2" - visible={showErrorAlert} - /> - <form class="space-y-6" on:submit|preventDefault={submitFormAsync}> - <Input - label={$LL.emailAddress()} - id="email" - name="email" - autocomplete="email" - required - type="email" - bind:value={formData.username} - /> - - <Input - label={$LL.password()} - id="password" - name="password" - required - type="password" - bind:value={formData.password} - /> - <Button type="submit" text={$LL.submit()} {loading} fullWidth /> - </form> - </div> - </div> -</div> |
