Add revalidation email
This commit is contained in:
parent
3e463ea286
commit
e83d8e802f
BIN
db.sqlite-shm
BIN
db.sqlite-shm
Binary file not shown.
BIN
db.sqlite-wal
BIN
db.sqlite-wal
Binary file not shown.
|
|
@ -4,13 +4,26 @@ import { hasPermissions } from "#shared/auth.util";
|
||||||
definePageMeta({
|
definePageMeta({
|
||||||
guestsGoesTo: '/user/login',
|
guestsGoesTo: '/user/login',
|
||||||
})
|
})
|
||||||
let { user, clear } = useUserSession();
|
const { user, clear } = useUserSession();
|
||||||
|
const toaster = useToast();
|
||||||
|
const loading = ref<boolean>(false);
|
||||||
|
|
||||||
|
async function revalidateUser()
|
||||||
|
{
|
||||||
|
loading.value = true;
|
||||||
|
await $fetch(`/api/users/${user.value?.id}/revalidate`, {
|
||||||
|
method: 'get'
|
||||||
|
});
|
||||||
|
loading.value = false;
|
||||||
|
toaster.add({ closeable: false, duration: 10000, timer: true, content: 'Un mail vous a été envoyé.', type: 'info' });
|
||||||
|
}
|
||||||
async function deleteUser()
|
async function deleteUser()
|
||||||
{
|
{
|
||||||
|
loading.value = true;
|
||||||
await $fetch(`/api/users/${user.value?.id}`, {
|
await $fetch(`/api/users/${user.value?.id}`, {
|
||||||
method: 'delete'
|
method: 'delete'
|
||||||
});
|
});
|
||||||
|
loading.value = false;
|
||||||
clear();
|
clear();
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
@ -36,14 +49,14 @@ async function deleteUser()
|
||||||
<template v-slot:content><span>Tant que votre adresse mail n'as pas été validée, vous n'avez que
|
<template v-slot:content><span>Tant que votre adresse mail n'as pas été validée, vous n'avez que
|
||||||
des droits de lecture.</span></template>
|
des droits de lecture.</span></template>
|
||||||
</HoverCard>
|
</HoverCard>
|
||||||
<Tooltip message="En cours de développement"><Button class="ms-4" disabled>Renvoyez un mail</Button></Tooltip>
|
<Button class="ms-4" @click="revalidateUser" :loading="loading">Renvoyez un mail</Button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex flex-col self-center flex-1 gap-4">
|
<div class="flex flex-col self-center flex-1 gap-4">
|
||||||
<Button @click="async () => await clear()">Se deconnecter</Button>
|
<Button @click="clear">Se deconnecter</Button>
|
||||||
<Button disabled><Tooltip message="En cours de développement">Modifier mon profil</Tooltip></Button>
|
<Button disabled><Tooltip message="En cours de développement">Modifier mon profil</Tooltip></Button>
|
||||||
<AlertDialogRoot>
|
<AlertDialogRoot>
|
||||||
<AlertDialogTrigger asChild><Button
|
<AlertDialogTrigger asChild><Button :loading="loading"
|
||||||
class="border-light-red dark:border-dark-red hover:border-light-red dark:hover:border-dark-red hover:bg-light-redBack dark:hover:bg-dark-redBack text-light-red dark:text-dark-red focus:shadow-light-red dark:focus:shadow-dark-red">Supprimer
|
class="border-light-red dark:border-dark-red hover:border-light-red dark:hover:border-dark-red hover:bg-light-redBack dark:hover:bg-dark-redBack text-light-red dark:text-dark-red focus:shadow-light-red dark:focus:shadow-dark-red">Supprimer
|
||||||
mon compte</Button></AlertDialogTrigger>
|
mon compte</Button></AlertDialogTrigger>
|
||||||
<AlertDialogPortal>
|
<AlertDialogPortal>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,64 @@
|
||||||
|
import { eq } from "drizzle-orm";
|
||||||
|
import useDatabase from "~/composables/useDatabase";
|
||||||
|
import { usersTable } from "~/db/schema";
|
||||||
|
|
||||||
|
export default defineEventHandler(async (e) => {
|
||||||
|
const session = await getUserSession(e);
|
||||||
|
|
||||||
|
if(!session || !session.user || !session.user.id)
|
||||||
|
{
|
||||||
|
return createError({
|
||||||
|
statusCode: 401,
|
||||||
|
message: 'Unauthorized',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const id = getRouterParam(e, 'id');
|
||||||
|
|
||||||
|
if(!id)
|
||||||
|
{
|
||||||
|
return createError({
|
||||||
|
statusCode: 403,
|
||||||
|
message: 'Forbidden',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if(session.user.id.toString() !== id)
|
||||||
|
{
|
||||||
|
return createError({
|
||||||
|
statusCode: 401,
|
||||||
|
message: 'Unauthorized',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
const db = useDatabase();
|
||||||
|
const data = db.select({ state: usersTable.state }).from(usersTable).where(eq(usersTable.id, session.user.id)).get();
|
||||||
|
|
||||||
|
if(!data)
|
||||||
|
{
|
||||||
|
return createError({
|
||||||
|
statusCode: 401,
|
||||||
|
message: 'Unauthorized',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if(data.state === 1)
|
||||||
|
{
|
||||||
|
setResponseStatus(e, 200);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
runTask('mail', {
|
||||||
|
payload: {
|
||||||
|
type: 'mail',
|
||||||
|
to: [session.user.email],
|
||||||
|
template: 'registration', //@TODO
|
||||||
|
data: {
|
||||||
|
username: session.user.username,
|
||||||
|
timestamp: Date.now(),
|
||||||
|
id: session.user.id,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
setResponseStatus(e, 200);
|
||||||
|
return;
|
||||||
|
})
|
||||||
Loading…
Reference in New Issue