/**
* Auth routes — challenge endpoint + identity management.
*/
import { json, readJson } from '../response.js'
export function registerAuthRoutes (router, server) {
// Get challenge for signing
router.get('/api/auth/challenge', async (req, res) => {
const challenge = await server.authManager.challengeManager.generate()
json(res, challenge)
})
// Create identity (register with username)
router.post('/api/auth/identity', async (req, res) => {
const body = await readJson(req)
const { publicKey, username } = body
if (!publicKey) {
json(res, { error: 'publicKey required' }, 400)
return
}
// Auto-register via WebIdentityProvider happens on first authenticated request.
// This endpoint allows setting a username.
if (username) {
const auth = await server.authManager.authenticate(req)
if (auth) {
await server.authManager.identityRegistry.setUsername(auth.userId, username)
json(res, { ok: true, username })
return
}
}
json(res, { ok: true })
})
// Get current user info
router.get('/api/auth/me', async (req, res) => {
const auth = await server.authManager.authenticate(req)
if (!auth) {
json(res, { authenticated: false })
return
}
const user = auth.user || null
json(res, {
authenticated: true,
userId: auth.userId,
method: auth.method,
permissions: auth.permissions,
username: user ? user.username : auth.username,
role: auth.permissions && auth.permissions.admin ? 'admin' : 'user'
})
})
}