From 1a1fab3f58a8459c3327e2e085e235ad732560e4 Mon Sep 17 00:00:00 2001 From: PxlLoewe <72106766+PxlLoewe@users.noreply.github.com> Date: Fri, 27 Jun 2025 23:39:28 -0700 Subject: [PATCH] =?UTF-8?q?Resources=20Seite=20f=C3=BCr=20Desktop-client?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/(app)/resources/_components/Card.tsx | 43 ++++++++++++++++ .../resources/_components/desktop-client.png | Bin 0 -> 51285 bytes apps/hub/app/(app)/resources/page.tsx | 18 +++++++ apps/hub/app/(auth)/passwort-reset/action.ts | 19 ++++--- apps/hub/app/_components/Nav.tsx | 7 +++ apps/hub/app/api/auth/[...nextauth]/auth.ts | 45 +--------------- apps/hub/types/oldUser.ts | 48 ++++++++++++++++++ 7 files changed, 131 insertions(+), 49 deletions(-) create mode 100644 apps/hub/app/(app)/resources/_components/Card.tsx create mode 100644 apps/hub/app/(app)/resources/_components/desktop-client.png create mode 100644 apps/hub/app/(app)/resources/page.tsx diff --git a/apps/hub/app/(app)/resources/_components/Card.tsx b/apps/hub/app/(app)/resources/_components/Card.tsx new file mode 100644 index 00000000..481ea283 --- /dev/null +++ b/apps/hub/app/(app)/resources/_components/Card.tsx @@ -0,0 +1,43 @@ +import { Download } from "lucide-react"; +import Image, { StaticImageData } from "next/image"; +import { ReactNode } from "react"; + +type ResourceCardProps = { + title?: string; + description?: string; + btnLabel?: string; + imageAlt?: string; + image?: StaticImageData; + btnHref?: string; + BtnIcon: ReactNode; +}; + +export default function ResourceCard({ + title, + BtnIcon, + description, + btnLabel: downloadLabel, + imageAlt, + image, + btnHref: downloadHref, +}: ResourceCardProps) { + return ( +
+
+ {image && ( +
+ {imageAlt +
+ )} +
+

{title}

+

{description}

+ + {BtnIcon} + {downloadLabel} + +
+
+
+ ); +} diff --git a/apps/hub/app/(app)/resources/_components/desktop-client.png b/apps/hub/app/(app)/resources/_components/desktop-client.png new file mode 100644 index 0000000000000000000000000000000000000000..7bc1e7dbd544359d9e8278c3e01d83576fc7b7e3 GIT binary patch literal 51285 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

rS~w!YwAS4_kV8ZWsZ8-fcyU_DS@~KL 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 literal 0 HcmV?d00001 diff --git a/apps/hub/app/(app)/resources/page.tsx b/apps/hub/app/(app)/resources/page.tsx new file mode 100644 index 00000000..e06d4855 --- /dev/null +++ b/apps/hub/app/(app)/resources/page.tsx @@ -0,0 +1,18 @@ +import ResourceCard from "(app)/resources/_components/Card"; +import { Download } from "lucide-react"; +import Desktop from "./_components/desktop-client.png"; + +export default function () { + return ( +

+ } + btnHref="https://cdn.virtualairrescue.com/desktop/setup.exe" + btnLabel="Herunterladen" + description="Verwende diesen Client, um dich mit dem VAR-Netzwerk zu verbinden. Wenn du verbindest kannst du einen Push-To-Talk key setzen um den Funk zu bedienen. Wenn du als Pilot fliegen möchtest wird deine Position aus dem Simulator an unser Tracker-System übertragen." + /> +
+ ); +} diff --git a/apps/hub/app/(auth)/passwort-reset/action.ts b/apps/hub/app/(auth)/passwort-reset/action.ts index 83308f74..2ed3775d 100644 --- a/apps/hub/app/(auth)/passwort-reset/action.ts +++ b/apps/hub/app/(auth)/passwort-reset/action.ts @@ -2,25 +2,32 @@ import { prisma } from "@repo/db"; import { sendMailByTemplate } from "../../../helper/mail"; +import OLD_USER from "../../api/auth/[...nextauth]/var.User.json"; import bcrypt from "bcryptjs"; +import { createNewUserFromOld, OldUser } from "../../../types/oldUser"; export const resetPassword = async (email: string) => { try { - const user = await prisma.user.findFirst({ + let user = await prisma.user.findFirst({ where: { email, }, }); - + const oldUser = (OLD_USER as OldUser[]).find((u) => u.email === email); if (!user) { - return { error: "Nutzer nicht gefunden" }; + if (oldUser) { + user = await createNewUserFromOld(oldUser); + // If the user is not found in the new database, check the old user data + } else { + return { error: "Nutzer nicht gefunden" }; + } } const array = new Uint8Array(8); crypto.getRandomValues(array); - const password = Array.from(array, (byte) => - ("0" + (byte % 36).toString(36)).slice(-1), - ).join(""); + const password = Array.from(array, (byte) => ("0" + (byte % 36).toString(36)).slice(-1)).join( + "", + ); const hashedPassword = await bcrypt.hash(password, 12); await prisma.user.update({ where: { diff --git a/apps/hub/app/_components/Nav.tsx b/apps/hub/app/_components/Nav.tsx index 1fb91c40..4148664a 100644 --- a/apps/hub/app/_components/Nav.tsx +++ b/apps/hub/app/_components/Nav.tsx @@ -5,6 +5,7 @@ import { LockClosedIcon, RocketIcon, ReaderIcon, + DownloadIcon, } from "@radix-ui/react-icons"; import Link from "next/link"; import { WarningAlert } from "./ui/PageAlert"; @@ -42,6 +43,12 @@ export const VerticalNav = async () => { Einstellungen +
  • + + + Downloads + +
  • {viewAdminMenu && (
  • diff --git a/apps/hub/app/api/auth/[...nextauth]/auth.ts b/apps/hub/app/api/auth/[...nextauth]/auth.ts index c9af7830..390faa8f 100644 --- a/apps/hub/app/api/auth/[...nextauth]/auth.ts +++ b/apps/hub/app/api/auth/[...nextauth]/auth.ts @@ -4,7 +4,7 @@ import Credentials from "next-auth/providers/credentials"; import { DiscordAccount, prisma, User } from "@repo/db"; import bcrypt from "bcryptjs"; import oldUser from "./var.User.json"; -import { OldUser } from "../../../../types/oldUser"; +import { createNewUserFromOld, OldUser } from "../../../../types/oldUser"; import { sendVerificationLink } from "(app)/admin/user/action"; export const options: AuthOptions = { @@ -28,48 +28,7 @@ export const options: AuthOptions = { "v1 User Passwords match:", bcrypt.compareSync(credentials.password, v1User.password), ); - const newUser = await prisma.user.create({ - data: { - email: v1User.email, - password: v1User.password, - migratedFromV1: true, - firstname: v1User.firstname, - lastname: v1User.lastname, - publicId: v1User.publicId, - badges: [ - ...v1User.badges - .map((badge) => { - switch (badge) { - case "day-1-member": - return "DAY1"; - case "d-1": - return "D1"; - case "p-1": - return "P1"; - default: - return null; - } - }) - .filter((badge) => badge !== null), - "V1Veteran", - ], - }, - }); - if (v1User.discord) { - await prisma.discordAccount.create({ - data: { - tokenType: "Bearer", - refreshToken: v1User.discord.tokens.refresh_token, - discordId: v1User.discord.profile.id, - userId: newUser.id, - username: v1User.discord.profile.username, - globalName: v1User.discord.profile.global_name, - avatar: v1User.discord.profile.avatar, - email: v1User.discord.profile.email, - verified: v1User.discord.profile.verified, - }, - }); - } + const newUser = await createNewUserFromOld(v1User); await sendVerificationLink(newUser.id); return newUser; } diff --git a/apps/hub/types/oldUser.ts b/apps/hub/types/oldUser.ts index 8c019843..1031edc0 100644 --- a/apps/hub/types/oldUser.ts +++ b/apps/hub/types/oldUser.ts @@ -1,3 +1,5 @@ +import { prisma } from "@repo/db"; + export interface OldUser { firstname: string; publicId: string; @@ -24,3 +26,49 @@ export interface OldUser { }; }; } + +export const createNewUserFromOld = async (oldUser: OldUser) => { + const newUser = await prisma.user.create({ + data: { + email: oldUser.email, + password: oldUser.password, + migratedFromV1: true, + firstname: oldUser.firstname, + lastname: oldUser.lastname, + publicId: oldUser.publicId, + badges: [ + ...oldUser.badges + .map((badge) => { + switch (badge) { + case "day-1-member": + return "DAY1"; + case "d-1": + return "D1"; + case "p-1": + return "P1"; + default: + return null; + } + }) + .filter((badge) => badge !== null), + "V1Veteran", + ], + }, + }); + if (oldUser.discord) { + await prisma.discordAccount.create({ + data: { + tokenType: "Bearer", + refreshToken: oldUser.discord.tokens.refresh_token, + discordId: oldUser.discord.profile.id, + userId: newUser.id, + username: oldUser.discord.profile.username, + globalName: oldUser.discord.profile.global_name, + avatar: oldUser.discord.profile.avatar, + email: oldUser.discord.profile.email, + verified: oldUser.discord.profile.verified, + }, + }); + } + return newUser; +};