138 lines
5.1 KiB
Svelte
138 lines
5.1 KiB
Svelte
<script>
|
|
import { AuthService } from "@odit/lfk-client-js";
|
|
import { _ } from "svelte-i18n";
|
|
import Toastify from "toastify-js";
|
|
import "toastify-js/src/toastify.css";
|
|
import PasswordStrength, {
|
|
password_strong_enough,
|
|
} from "../auth/PasswordStrength.svelte";
|
|
let state = "reset_in_progress";
|
|
let password = "";
|
|
export let params;
|
|
function set_new_password() {
|
|
if (password.trim() !== "") {
|
|
Toastify({
|
|
text: $_("password-reset-in-progress"),
|
|
duration: 3500,
|
|
}).showToast();
|
|
AuthService.authControllerResetPassword(atob(params.resetkey), {
|
|
password,
|
|
})
|
|
.then((resp) => {
|
|
Toastify({
|
|
text: $_("password-reset-successful"),
|
|
duration: 3500,
|
|
}).showToast();
|
|
state = "reset_success";
|
|
})
|
|
.catch((err) => {
|
|
state = "reset_error";
|
|
});
|
|
} else {
|
|
Toastify({
|
|
text: $_("please-provide-a-password"),
|
|
duration: 3500,
|
|
}).showToast();
|
|
}
|
|
}
|
|
</script>
|
|
|
|
{#if state === 'reset_success'}
|
|
<div class="min-h-screen flex items-center justify-center bg-gray-100">
|
|
<div class="max-w-md w-full py-12 px-6">
|
|
<img style="height:10rem;" class="mx-auto" src="/lfk-logo.png" alt="" />
|
|
<p class="mt-6 text-lg text-center font-bold text-gray-900">
|
|
{$_('application_name')}
|
|
</p>
|
|
<p class="mt-2 mb-2 text-sm text-center text-gray-900 font-bold">
|
|
{$_('successful-password-reset')}
|
|
</p>
|
|
<p class="mt-2 mb-2 text-sm text-center text-gray-900">
|
|
{$_('you-can-now-use-your-new-password-to-log-in-to-your-account')}
|
|
</p>
|
|
<div class="mt-6">
|
|
<div class="mt-6">
|
|
<a
|
|
href="/login/"
|
|
class="text-center relative block w-full py-2 px-3 border border-transparent rounded-md text-white font-semibold bg-gray-800 hover:bg-gray-700 focus:bg-gray-900 focus:outline-none focus:shadow-outline sm:text-sm">
|
|
{$_('go-to-login')}
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{:else if state === 'reset_error'}
|
|
<div class="min-h-screen flex items-center justify-center bg-gray-100">
|
|
<div class="max-w-md w-full py-12 px-6">
|
|
<img style="height:10rem;" class="mx-auto" src="/lfk-logo.png" alt="" />
|
|
<p class="mt-6 text-lg text-center font-bold text-gray-900">
|
|
{$_('application_name')}
|
|
</p>
|
|
<p class="mt-2 mb-2 text-sm text-center text-gray-900 font-bold">
|
|
{$_('password-reset-failed')}
|
|
</p>
|
|
<p class="mt-2 mb-2 text-sm text-center text-gray-900">
|
|
{$_('please-request-a-new-reset-mail')}
|
|
</p>
|
|
<div class="mt-6">
|
|
<div class="mt-6">
|
|
<a
|
|
href="/forgot_password/"
|
|
class="text-center relative block w-full py-2 px-3 border border-transparent rounded-md text-white font-semibold bg-gray-800 hover:bg-gray-700 focus:bg-gray-900 focus:outline-none focus:shadow-outline sm:text-sm">
|
|
{$_('request-a-new-reset-mail')}
|
|
</a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{:else if state === 'reset_in_progress'}
|
|
<div class="min-h-screen flex items-center justify-center bg-gray-100">
|
|
<div class="max-w-md w-full py-12 px-6">
|
|
<img style="height:10rem;" class="mx-auto" src="/lfk-logo.png" alt="" />
|
|
<p class="mt-6 text-lg text-center font-bold text-gray-900">
|
|
{$_('application_name')}
|
|
</p>
|
|
<p class="mt-2 mb-4 text-md text-center text-gray-900">
|
|
{$_('reset-password')}
|
|
</p>
|
|
<div>
|
|
<div class="rounded-md shadow-sm">
|
|
<div>
|
|
<input
|
|
aria-label={$_('new-password')}
|
|
name="password"
|
|
type="password"
|
|
required=""
|
|
class="border-gray-300 placeholder-gray-500 appearance-none rounded-md relative block w-full px-3 py-2 border text-gray-900 focus:outline-none focus:shadow-outline-blue focus:border-blue-300 focus:z-10 sm:text-sm"
|
|
placeholder={$_('new-password')}
|
|
bind:value={password} />
|
|
</div>
|
|
<PasswordStrength bind:password_change={password} />
|
|
</div>
|
|
|
|
<div class="mt-5">
|
|
<button
|
|
on:click={set_new_password}
|
|
disabled={!password_strong_enough(password)}
|
|
class:opacity-50={!password_strong_enough(password)}
|
|
type="submit"
|
|
class="relative block w-full py-2 px-3 border border-transparent rounded-md text-white font-semibold bg-gray-800 hover:bg-gray-700 focus:bg-gray-900 focus:outline-none focus:shadow-outline sm:text-sm">
|
|
<span class="absolute left-0 inset-y pl-3">
|
|
<svg
|
|
class="h-5 w-5 text-gray-500"
|
|
fill="currentColor"
|
|
viewBox="0 0 20 20">
|
|
<path
|
|
fill-rule="evenodd"
|
|
d="M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z"
|
|
clip-rule="evenodd" />
|
|
</svg>
|
|
</span>
|
|
{$_('reset-my-password')}
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{/if}
|