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 }) => (
(
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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( );
+}
diff --git a/apps/hub-server/modules/mail-templates/CourseCompleted.tsx b/apps/hub-server/modules/mail-templates/CourseCompleted.tsx
index 69f2e138..66fd6d88 100644
--- a/apps/hub-server/modules/mail-templates/CourseCompleted.tsx
+++ b/apps/hub-server/modules/mail-templates/CourseCompleted.tsx
@@ -79,16 +79,12 @@ const Template = ({ event, user }: { user: User; event: Event }) => (
-
+
(
color: "#011936",
}}
>
- Du hast den Kurs {event.name} {" "}
- abgeschlossen!
+ Du hast den Kurs {event.name} abgeschlossen!
@@ -133,8 +128,7 @@ const Template = ({ event, user }: { user: User; event: Event }) => (
color: "#011936",
}}
>
- Mit dem Abschluss von Kursen verdienst du dir nach und
- nach immer mehr Badges.
+ Mit dem Abschluss von Kursen verdienst du dir nach und nach immer mehr Badges.
@@ -186,12 +180,6 @@ const Template = ({ event, user }: { user: User; event: Event }) => (