From b0caf56addbdf811477b3d81860e4cd5b7107140 Mon Sep 17 00:00:00 2001 From: PxlLoewe <72106766+PxlLoewe@users.noreply.github.com> Date: Fri, 30 May 2025 01:06:28 -0700 Subject: [PATCH] added email verification --- .../modules/socketJWTmiddleware.ts | 8 +- apps/dispatch/app/dispatch/layout.tsx | 4 + apps/dispatch/app/pilot/layout.tsx | 4 + apps/hub-server/index.ts | 2 +- .../modules/mail-templates/Badge.tsx | 2 +- .../modules/mail-templates/ConfirmEmail.tsx | 235 ++++++++++++++++++ .../mail-templates/CourseCompleted.tsx | 22 +- apps/hub-server/modules/mail.ts | 27 +- apps/hub-server/routes/mail.ts | 8 +- apps/hub-server/tsconfig.json | 2 +- apps/hub/app/(app)/_components/Logbook.tsx | 66 ----- .../admin/user/[id]/_components/forms.tsx | 19 +- apps/hub/app/(app)/admin/user/action.ts | 58 ++++- apps/hub/app/(app)/page.tsx | 7 +- .../settings/email-verification/page.tsx | 47 ++++ .../hub/app/_components/EmailVerification.tsx | 36 +++ apps/hub/app/_components/Nav.tsx | 8 +- apps/hub/app/_components/ui/Nav.tsx | 87 ------- apps/hub/helper/mail.ts | 27 +- packages/database/prisma/schema/user.prisma | 22 +- 20 files changed, 459 insertions(+), 232 deletions(-) create mode 100644 apps/hub-server/modules/mail-templates/ConfirmEmail.tsx delete mode 100644 apps/hub/app/(app)/_components/Logbook.tsx create mode 100644 apps/hub/app/(app)/settings/email-verification/page.tsx create mode 100644 apps/hub/app/_components/EmailVerification.tsx delete mode 100644 apps/hub/app/_components/ui/Nav.tsx diff --git a/apps/dispatch-server/modules/socketJWTmiddleware.ts b/apps/dispatch-server/modules/socketJWTmiddleware.ts index 6ec74573..0670870f 100644 --- a/apps/dispatch-server/modules/socketJWTmiddleware.ts +++ b/apps/dispatch-server/modules/socketJWTmiddleware.ts @@ -1,12 +1,8 @@ import { ExtendedError, Server, Socket } from "socket.io"; import { prisma } from "@repo/db"; -if (!process.env.DISPATCH_APP_TOKEN) - throw new Error("DISPATCH_APP_TOKEN is not defined"); +if (!process.env.DISPATCH_APP_TOKEN) throw new Error("DISPATCH_APP_TOKEN is not defined"); -export const jwtMiddleware = async ( - socket: Socket, - next: (err?: ExtendedError) => void, -) => { +export const jwtMiddleware = async (socket: Socket, next: (err?: ExtendedError) => void) => { try { const { uid } = socket.handshake.auth; if (!uid) return new Error("Authentication error"); diff --git a/apps/dispatch/app/dispatch/layout.tsx b/apps/dispatch/app/dispatch/layout.tsx index b8c72619..514655b8 100644 --- a/apps/dispatch/app/dispatch/layout.tsx +++ b/apps/dispatch/app/dispatch/layout.tsx @@ -19,6 +19,10 @@ export default async function RootLayout({ if (!session) { redirect("/login"); } + + if (!session.user.emailVerified) + return ; + if (!session.user.permissions.includes("DISPO")) return ; return ( diff --git a/apps/dispatch/app/pilot/layout.tsx b/apps/dispatch/app/pilot/layout.tsx index df59922c..60e56fd1 100644 --- a/apps/dispatch/app/pilot/layout.tsx +++ b/apps/dispatch/app/pilot/layout.tsx @@ -19,6 +19,10 @@ export default async function RootLayout({ if (!session) { redirect("/login"); } + if (!session.user.emailVerified) { + return ; + } + if (!session.user.permissions.includes("PILOT")) return ; return ( diff --git a/apps/hub-server/index.ts b/apps/hub-server/index.ts index a8fe991a..22c1a30f 100644 --- a/apps/hub-server/index.ts +++ b/apps/hub-server/index.ts @@ -11,7 +11,7 @@ app.use(cors()); app.use(router); -const port = process.env.HUB_API_PORT || 3000; +const port = process.env.HUB_SERVER_PORT || 3000; app.listen(port, () => { console.log(`Server is running on port ${port}`); }); diff --git a/apps/hub-server/modules/mail-templates/Badge.tsx b/apps/hub-server/modules/mail-templates/Badge.tsx index ff7b32f3..019d8187 100644 --- a/apps/hub-server/modules/mail-templates/Badge.tsx +++ b/apps/hub-server/modules/mail-templates/Badge.tsx @@ -13,7 +13,7 @@ const badgeImageMapping = { export const Badge = ({ badge }: { badge: BADGES }) => ( Badge ( + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Logo +
+ Bestätigung deiner E-Mail-Adresse +
+ Hallo {user.firstname}, +
+ Klicke auf den folgenden Link, um deinen Account zu bestätigen: +
+ + E-Mail bestätigen + +
+ Oder gehe zu{" "} +

+ + {process.env.NEXT_PUBLIC_HUB_URL}/settings/email-verification + +

{" "} + und gib dort deinen Code ein. +
+ Deinen Code lautet: {code} +
+ + Impressum + + | + + Datenschutzerklärung + + | + + Knowledgebase + +
+
+ + +); + +export function renderVerificationCode({ user, code }: { user: User; code: string }) { + return render(