feat: add hub
This commit is contained in:
@@ -11,7 +11,7 @@ export default defineEventHandler(async (event) => {
|
||||
|
||||
if (!(await passwordMatches(event, password))) {
|
||||
await new Promise(resolve => setTimeout(resolve, FAILED_LOGIN_DELAY_MS))
|
||||
throw createError({ statusCode: 401, statusMessage: 'Wrong password' })
|
||||
throw createError({ statusCode: 401, statusMessage: 'Falsches Passwort' })
|
||||
}
|
||||
|
||||
const session = await authSession(event)
|
||||
|
||||
@@ -6,6 +6,6 @@ export default defineEventHandler(async (event) => {
|
||||
|
||||
const session = await authSession(event)
|
||||
if (!session.data.unlocked) {
|
||||
throw createError({ statusCode: 401, statusMessage: 'Locked' })
|
||||
throw createError({ statusCode: 401, statusMessage: 'Gesperrt' })
|
||||
}
|
||||
})
|
||||
|
||||
@@ -10,7 +10,7 @@ const SESSION_MAX_AGE_S = 60 * 60 * 24 * 30
|
||||
export function authSession(event: H3Event) {
|
||||
const { sessionSecret } = useRuntimeConfig(event)
|
||||
if (!sessionSecret || sessionSecret.length < 32) {
|
||||
throw createError({ statusCode: 500, statusMessage: 'NUXT_SESSION_SECRET must be set (at least 32 characters)' })
|
||||
throw createError({ statusCode: 500, statusMessage: 'NUXT_SESSION_SECRET muss gesetzt sein (mindestens 32 Zeichen)' })
|
||||
}
|
||||
return useSession<AuthSession>(event, {
|
||||
// Kept from when only the diary had a login, so existing logins stay valid
|
||||
@@ -28,7 +28,7 @@ async function sha256(text: string): Promise<Uint8Array> {
|
||||
export async function passwordMatches(event: H3Event, guess: string): Promise<boolean> {
|
||||
const { diaryPassword } = useRuntimeConfig(event)
|
||||
if (!diaryPassword) {
|
||||
throw createError({ statusCode: 500, statusMessage: 'NUXT_DIARY_PASSWORD is not set' })
|
||||
throw createError({ statusCode: 500, statusMessage: 'NUXT_DIARY_PASSWORD ist nicht gesetzt' })
|
||||
}
|
||||
|
||||
const [a, b] = await Promise.all([sha256(guess), sha256(diaryPassword)])
|
||||
|
||||
@@ -17,7 +17,7 @@ async function request<T>(
|
||||
): Promise<T> {
|
||||
const { baserowUrl, baserowToken } = useRuntimeConfig(event)
|
||||
if (!baserowUrl || !baserowToken) {
|
||||
throw createError({ statusCode: 500, statusMessage: 'NUXT_BASEROW_URL and NUXT_BASEROW_TOKEN must be set' })
|
||||
throw createError({ statusCode: 500, statusMessage: 'NUXT_BASEROW_URL und NUXT_BASEROW_TOKEN müssen gesetzt sein' })
|
||||
}
|
||||
|
||||
try {
|
||||
@@ -33,7 +33,7 @@ async function request<T>(
|
||||
const detail = error?.data?.detail
|
||||
throw createError({
|
||||
statusCode: error?.statusCode ?? 502,
|
||||
statusMessage: typeof detail === 'string' ? detail : 'Baserow request failed'
|
||||
statusMessage: typeof detail === 'string' ? detail : 'Baserow-Anfrage fehlgeschlagen'
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ import type { z } from 'zod'
|
||||
export async function readValidBody<Schema extends z.ZodType>(event: H3Event, schema: Schema): Promise<z.output<Schema>> {
|
||||
const result = schema.safeParse(await readBody(event))
|
||||
if (!result.success) {
|
||||
throw createError({ statusCode: 400, statusMessage: result.error.issues[0]?.message ?? 'Invalid request' })
|
||||
throw createError({ statusCode: 400, statusMessage: result.error.issues[0]?.message ?? 'Ungültige Anfrage' })
|
||||
}
|
||||
return result.data
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user