From e83d8e802f4ec37e05d10057457b2c54787afbef Mon Sep 17 00:00:00 2001 From: Peaceultime Date: Tue, 26 Nov 2024 16:23:33 +0100 Subject: [PATCH] Add revalidation email --- db.sqlite | Bin 569344 -> 569344 bytes db.sqlite-shm | Bin 32768 -> 32768 bytes db.sqlite-wal | Bin 0 -> 8272 bytes pages/user/profile.vue | 21 ++++++-- server/api/users/[id]/revalidate.get.ts | 64 ++++++++++++++++++++++++ 5 files changed, 81 insertions(+), 4 deletions(-) create mode 100644 server/api/users/[id]/revalidate.get.ts diff --git a/db.sqlite b/db.sqlite index a7fd13a43f731a5eb1ed500489a17f6144d2ef79..bb49ff17cb8afbb6d835e046148f12ebf7115cc7 100644 GIT binary patch delta 49 wcmZp8pw#d{X~Uv;raNlQOXAy?#4`dh6A&{4F$)m00x=s9vu|G#&k+*<03s+9kN^Mx delta 49 wcmZp8pw#d{X~Uv;rrY|>OXAy?#4`dh6A&{4F$)m00x=s9vu|G#&k+*<03%lvm;e9( diff --git a/db.sqlite-shm b/db.sqlite-shm index fe9ac2845eca6fe6da8a63cd096d9cf9e24ece10..d0ccda3959eaa00ee4fb205584159c76b2f26000 100644 GIT binary patch delta 155 zcmZo@U}|V!s+V}A%K!pQK+MR%AONDff%wto@2ZZEj8hjsd7Aj`$sVnx<%%<(&p*3} lRP{ikzyM_KerWM*Vw+Stgc2LL)XG*bWo delta 80 zcmZo@U}|V!;+1%$%K!t66DLZGTChv7nNGgVi7p`mlYpuI4+Il)WHv4c3Ea3qMGpX& C856|- diff --git a/db.sqlite-wal b/db.sqlite-wal index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c0dee0ecf7bdbd53d2bf0622fa6cad9cf44ee299 100644 GIT binary patch literal 8272 zcmeI$F;2rU6b9fxqe=`YWrG8-pghS*Y{wQ1FjT+>0|&5UJ7Q!hBLYUa1w8{(kH7>s zh>9w~4lB;UfJDb`|C2oU*OO&`-d=q(yi2ItPLfg5*VFvne9dQj@@4V7b2UAW(J-!u z-~9f1bT~V`-P(-dAe$uFYc|a$*-6}@AOHafKmY;|fB*y_009U<00IzLB9N!)#YU>M zR-*EPf?$TYV2re?IC0O*vNnoI?ON7RKIprp6BYMmAi+)S5lWFZhLN?l2;R6NgrXfU zKJxXx+gjdeZ!B3>m&9!dWTh)f7OWA@S|(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