yunohost-portal/pages/password.vue

86 lines
2.3 KiB
Vue
Raw Normal View History

2023-07-26 05:19:52 +02:00
<script setup lang="ts">
import { useForm } from 'vee-validate'
import { toTypedSchema } from '@vee-validate/yup'
2023-07-26 05:19:52 +02:00
import * as yup from 'yup'
const { handleSubmit } = useForm({
validationSchema: toTypedSchema(
yup.object({
2023-08-07 17:29:04 +02:00
current: yup.string().required().min(8),
2023-08-01 16:27:27 +02:00
password: yup.string().required().min(8),
confirmPassword: yup
.string()
2023-08-07 17:29:04 +02:00
.oneOf([yup.ref('password')], 'v.password_not_match')
.required(),
}),
),
})
2023-07-26 05:19:52 +02:00
2023-08-01 16:27:27 +02:00
const onSubmit = handleSubmit(async (form) => {
const { error } = await useApi('/me/update_password', {
method: 'PUT',
body: { current: form.current, password: form.password },
})
if (!error.value) {
useIsLoggedIn().value = false
navigateTo('/login')
} else {
// FIXME display generic error
}
})
2023-07-26 05:19:52 +02:00
</script>
<template>
2023-08-06 16:27:24 +02:00
<div>
<PageTitle :text="$t('change_password')" />
2023-07-26 05:19:52 +02:00
2023-08-06 16:27:24 +02:00
<form novalidate class="my-10" @submit="onSubmit">
<!-- FIXME replace with accessible component -->
<div role="alert" class="alert alert-warning mb-10">
<Icon name="mdi:warning-outline" size="2em" />
{{ $t('good_practices_about_user_password') }}
2023-07-26 05:19:52 +02:00
</div>
2023-08-06 16:27:24 +02:00
<div class="md:flex">
<div class="basis-1/2 mb-10 md:mr-10">
<FormField name="current" :label="$t('current_password')">
<TextInput
name="current"
type="password"
autocomplete="currrent-password"
class="w-full"
/>
</FormField>
</div>
2023-07-26 05:19:52 +02:00
2023-08-06 16:27:24 +02:00
<div class="basis-1/2 md:ml-10">
<FormField name="password" :label="$t('new_password')" class="mb-3">
<TextInput
name="password"
type="password"
autocomplete="new-password"
class="w-full"
/>
</FormField>
<FormField name="confirmPassword" :label="$t('confirm_new_password')">
<TextInput
name="confirmPassword"
type="password"
autocomplete="new-password"
class="w-full"
/>
</FormField>
</div>
2023-07-26 05:19:52 +02:00
</div>
2023-08-06 16:27:24 +02:00
<div class="flex mt-10">
<NuxtLink to="/" class="btn ml-auto mr-2">
{{ $t('cancel') }}
</NuxtLink>
<YButton :text="$t('ok')" type="submit" variant="success" />
</div>
</form>
</div>
2023-07-26 05:19:52 +02:00
</template>