From 943efe4b4596b3b518ddfd8e388540fa77d544f5 Mon Sep 17 00:00:00 2001 From: chahinebrini Date: Thu, 18 Jun 2026 00:06:39 +0200 Subject: [PATCH] fix(backend): remove hardwareId references, use deviceId only --- backend/server/api/magic/devices.get.ts | 3 - backend/server/api/magic/register.post.ts | 79 +++++------------------ backend/server/db/devices.ts | 3 - 3 files changed, 16 insertions(+), 69 deletions(-) diff --git a/backend/server/api/magic/devices.get.ts b/backend/server/api/magic/devices.get.ts index 6b4f232..9411cf7 100644 --- a/backend/server/api/magic/devices.get.ts +++ b/backend/server/api/magic/devices.get.ts @@ -32,7 +32,6 @@ export default defineEventHandler(async (event) => { select: { id: true, deviceId: true, - hardwareId: true, platform: true, model: true, name: true, @@ -66,7 +65,6 @@ export default defineEventHandler(async (event) => { return { source: "magic" as const, deviceId: d.deviceId, - hardwareId: d.hardwareId, hostname: d.hostname ?? "Unbenanntes Ger\u00e4t", model: d.model, osVersion: d.osVersion, @@ -90,7 +88,6 @@ export default defineEventHandler(async (event) => { return { source: "locked" as const, deviceId: d.deviceId, - hardwareId: d.hardwareId, hostname: d.name ?? d.model ?? prettyPlatform(d.platform), model: d.model, osVersion: d.osVersion, diff --git a/backend/server/api/magic/register.post.ts b/backend/server/api/magic/register.post.ts index 7444d4c..c1f8153 100644 --- a/backend/server/api/magic/register.post.ts +++ b/backend/server/api/magic/register.post.ts @@ -22,9 +22,8 @@ import { generateRemovalPassword } from "../../utils/magic-lock"; export default defineEventHandler(async (event) => { const user = await requireUser(event); const body = await readBody(event); - const { deviceId, hardwareId, hostname, model, osVersion, platform } = body as { + const { deviceId, hostname, model, osVersion, platform } = body as { deviceId?: string; - hardwareId?: string; hostname?: string; model?: string; osVersion?: string; @@ -38,16 +37,14 @@ export default defineEventHandler(async (event) => { }); } - if (!deviceId && !hardwareId) { + if (!deviceId) { throw createError({ statusCode: 400, - message: "deviceId oder hardwareId required", + message: "deviceId required", }); } - // Für neue Magic-Registrierungen: hardwareId wird gleichzeitig deviceId, - // damit das Backend keine eigene ID generieren muss. - const effectiveDeviceId = deviceId?.trim() || hardwareId!.trim(); + const effectiveDeviceId = deviceId.trim(); // Plattform: Mac-App sendet nichts (legacy default), Windows-App sendet "windows" const devicePlatform = @@ -56,60 +53,18 @@ export default defineEventHandler(async (event) => { const db = usePrisma(); // 1. Prüfe ob Device bereits als Magic-Client gebunden ist (idempotent) - // Priorität: hardwareId → deviceId → Migration über Modell/Plattform/OS. - let existing = null; - - if (hardwareId) { - existing = await db.userDevice.findFirst({ - where: { userId: user.id, hardwareId }, - select: { - id: true, - userId: true, - deviceId: true, - magicDnsToken: true, - magicEnrolledAt: true, - magicRevokedAt: true, - magicRemovalPassword: true, - }, - }); - } - - if (!existing && deviceId) { - existing = await db.userDevice.findUnique({ - where: { userId_deviceId: { userId: user.id, deviceId } }, - select: { - id: true, - userId: true, - deviceId: true, - magicDnsToken: true, - magicEnrolledAt: true, - magicRevokedAt: true, - magicRemovalPassword: true, - }, - }); - } - - // Migration: bestehendes Gerät ohne hardwareId anhand von Modell/Plattform/OS finden. - if (!existing && hardwareId) { - existing = await db.userDevice.findFirst({ - where: { - userId: user.id, - hardwareId: null, - platform: devicePlatform, - model: model ?? null, - osVersion: osVersion ?? null, - }, - select: { - id: true, - userId: true, - deviceId: true, - magicDnsToken: true, - magicEnrolledAt: true, - magicRevokedAt: true, - magicRemovalPassword: true, - }, - }); - } + let existing = await db.userDevice.findUnique({ + where: { userId_deviceId: { userId: user.id, deviceId } }, + select: { + id: true, + userId: true, + deviceId: true, + magicDnsToken: true, + magicEnrolledAt: true, + magicRevokedAt: true, + magicRemovalPassword: true, + }, + }); // Wenn Token existiert und nicht revoked → return existing if ( @@ -199,14 +154,12 @@ export default defineEventHandler(async (event) => { model: model ?? null, name: hostname, osVersion: osVersion ?? null, - hardwareId: hardwareId ?? null, magicDnsToken: dnsToken, magicEnrolledAt: new Date(), magicHostname: hostname, magicRemovalPassword: removalPassword, }, update: { - hardwareId: hardwareId ?? undefined, magicDnsToken: dnsToken, magicEnrolledAt: new Date(), magicRevokedAt: null, // Clear falls vorher revoked diff --git a/backend/server/db/devices.ts b/backend/server/db/devices.ts index bcf1bdb..63048d3 100644 --- a/backend/server/db/devices.ts +++ b/backend/server/db/devices.ts @@ -418,7 +418,6 @@ export async function deleteUserDevice( export interface MagicDeviceRecord { deviceId: string; - hardwareId: string | null; hostname: string | null; model: string | null; osVersion: string | null; @@ -447,7 +446,6 @@ export async function listMagicDevices( orderBy: { magicEnrolledAt: "desc" }, select: { deviceId: true, - hardwareId: true, magicHostname: true, model: true, osVersion: true, @@ -462,7 +460,6 @@ export async function listMagicDevices( return devices.map((d) => ({ deviceId: d.deviceId, - hardwareId: d.hardwareId, hostname: d.magicHostname, model: d.model, osVersion: d.osVersion,