diff --git a/db.sqlite b/db.sqlite index a7fd13a..bb49ff1 100644 Binary files a/db.sqlite and b/db.sqlite differ diff --git a/db.sqlite-shm b/db.sqlite-shm index fe9ac28..d0ccda3 100644 Binary files a/db.sqlite-shm and b/db.sqlite-shm differ diff --git a/db.sqlite-wal b/db.sqlite-wal index e69de29..c0dee0e 100644 Binary files a/db.sqlite-wal and b/db.sqlite-wal differ diff --git a/pages/user/profile.vue b/pages/user/profile.vue index 83aa97b..b8d9f2b 100644 --- a/pages/user/profile.vue +++ b/pages/user/profile.vue @@ -4,13 +4,26 @@ import { hasPermissions } from "#shared/auth.util"; definePageMeta({ guestsGoesTo: '/user/login', }) -let { user, clear } = useUserSession(); +const { user, clear } = useUserSession(); +const toaster = useToast(); +const loading = ref(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() { + loading.value = true; await $fetch(`/api/users/${user.value?.id}`, { method: 'delete' }); + loading.value = false; clear(); } @@ -36,14 +49,14 @@ async function deleteUser() - +
- + - diff --git a/server/api/users/[id]/revalidate.get.ts b/server/api/users/[id]/revalidate.get.ts new file mode 100644 index 0000000..dcd0dd6 --- /dev/null +++ b/server/api/users/[id]/revalidate.get.ts @@ -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; +}) \ No newline at end of file