Generated with [Devin](https://devin.ai) Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
23 lines
1.1 KiB
TypeScript
23 lines
1.1 KiB
TypeScript
import { eq } from 'drizzle-orm'
|
|
import { z } from 'zod'
|
|
import { users } from '../../db/schema'
|
|
|
|
const bodySchema = z.object({
|
|
name: z.string().trim().min(1),
|
|
password: z.string().min(1),
|
|
})
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const body = await readValidatedBody(event, bodySchema.parse)
|
|
const db = useDb()
|
|
|
|
const rows = await db.select().from(users).where(eq(users.name, body.name)).limit(1)
|
|
const user = rows[0]
|
|
if (!user || !verifyPassword(body.password, user.passwordHash)) {
|
|
throw createError({ statusCode: 401, statusMessage: 'Name oder Passwort falsch' })
|
|
}
|
|
|
|
await createSession(event, user.id)
|
|
return { user: { id: user.id, name: user.name, email: user.email, color: user.color, bio: user.bio, cardEffect: user.cardEffect, cardEffectColor: user.cardEffectColor, cardVignette: user.cardVignette, cardBorderEffect: user.cardBorderEffect, cardBorderEffectColor: user.cardBorderEffectColor, cardHoloEffect: user.cardHoloEffect, avatarUrl: avatarUrl(user.avatar), roles: await getUserRoles(user.id), permissions: await getUserPermissions(user.id) } }
|
|
})
|