Add PostgreSQL and Redis integration for users and sessions Implement password and WebAuthn passkey login flows Add Docker stack, super-admin seeding, and protected routes
31 lines
1000 B
TypeScript
31 lines
1000 B
TypeScript
import { generateRegistrationOptions } from '@simplewebauthn/server'
|
|
|
|
import { requireAuth } from '../../../../utils/auth'
|
|
import { listCredentialDescriptors } from '../../../../utils/user-repository'
|
|
import { getWebAuthnConfig, storeRegistrationChallenge } from '../../../../utils/webauthn'
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const auth = await requireAuth(event)
|
|
const config = getWebAuthnConfig(event)
|
|
const excludeCredentials = await listCredentialDescriptors(auth.user.id)
|
|
const options = await generateRegistrationOptions({
|
|
rpName: config.rpName,
|
|
rpID: config.rpID,
|
|
userName: auth.user.username,
|
|
userDisplayName: auth.user.fullName,
|
|
userID: Buffer.from(auth.user.id),
|
|
excludeCredentials,
|
|
authenticatorSelection: {
|
|
residentKey: 'required',
|
|
userVerification: 'preferred'
|
|
},
|
|
preferredAuthenticatorType: 'localDevice'
|
|
})
|
|
|
|
await storeRegistrationChallenge(auth.user.id, options.challenge)
|
|
|
|
return {
|
|
options
|
|
}
|
|
})
|