feat(bridge): add unlink flow for linked tokens

This commit is contained in:
itsrubberduck
2026-02-16 16:39:18 +01:00
parent e1130734c1
commit c4f9237916
2 changed files with 415 additions and 25 deletions

View File

@@ -0,0 +1,54 @@
import { createError } from 'h3'
import { requireUserSession } from '../../utils/auth'
import { getBridgeTokenFromHeader } from '../../utils/bridge'
import { BridgeToken } from '../../models/BridgeToken'
export default defineEventHandler(async (event) => {
const user = await requireUserSession(event)
const token = getBridgeTokenFromHeader(event)
if (!token) {
throw createError({ statusCode: 401, statusMessage: 'x-bridge-token header fehlt oder ist ungültig.' })
}
console.info(
`\x1b[31m[bridge:disconnect]\x1b[0m token=\x1b[96m${token.slice(0, 6)}...\x1b[0m user=\x1b[92m${String(user._id)}\x1b[0m`,
)
const existing = await BridgeToken.findOne({ token }).select('user token')
if (!existing || !existing.user) {
return {
success: true,
token,
connected: false,
}
}
if (String(existing.user) !== String(user._id)) {
throw createError({
statusCode: 403,
statusMessage: 'Dieses Bridge-Token ist mit einem anderen Account verknüpft.',
})
}
await BridgeToken.updateOne(
{ token, user: user._id },
{
$unset: {
user: 1,
connectedAt: 1,
lastStatusAt: 1,
},
$set: {
simConnected: false,
flightActive: false,
},
},
)
return {
success: true,
token,
connected: false,
}
})