refactor: restructure passkey with dedicated package
- Create internal/passkey/ package with challenge session management - Add HTTP handler layer in internal/api/passkey.go - Simplify Passkey model to use blob credential storage - Register passkey routes in router - Update frontend to match new API endpoints - Add .env.example template
This commit is contained in:
@@ -10,6 +10,7 @@ import (
|
||||
"opencatd-open/internal/api"
|
||||
"opencatd-open/internal/channel"
|
||||
"opencatd-open/internal/dao"
|
||||
"opencatd-open/internal/passkey"
|
||||
"opencatd-open/internal/proxy"
|
||||
"opencatd-open/internal/usage"
|
||||
"opencatd-open/middleware"
|
||||
@@ -61,8 +62,19 @@ func SetRouter(cfg *config.Config, db *gorm.DB, web *embed.FS) {
|
||||
gateway := proxy.NewGateway(ctx, cfg, db, &wg, userDAO, apiKeyDAO, usageDAO, dailyDAO)
|
||||
gateway.SetChannelService(channelSvc)
|
||||
gateway.SetUsageRecorder(usageRecorder)
|
||||
|
||||
// Initialize passkey service
|
||||
passkeySvc, err := passkey.New(db, passkey.Config{
|
||||
RPID: cfg.RPID,
|
||||
Origins: cfg.RPOrigins,
|
||||
Name: cfg.AppName,
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to initialize passkey service: %v", err)
|
||||
}
|
||||
|
||||
// Initialize API handler
|
||||
apiHandler := api.NewHandler(db)
|
||||
apiHandler := api.NewHandler(db, passkeySvc)
|
||||
|
||||
r := gin.Default()
|
||||
r.Use(middleware.CORS())
|
||||
@@ -72,6 +84,8 @@ func SetRouter(cfg *config.Config, db *gorm.DB, web *embed.FS) {
|
||||
{
|
||||
public.POST("/register", apiHandler.Register)
|
||||
public.POST("/login", apiHandler.Login)
|
||||
public.POST("/passkey/begin", apiHandler.PasskeyLoginBegin)
|
||||
public.POST("/passkey/finish", apiHandler.PasskeyLoginComplete)
|
||||
}
|
||||
|
||||
// API routes (authenticated)
|
||||
@@ -83,6 +97,12 @@ func SetRouter(cfg *config.Config, db *gorm.DB, web *embed.FS) {
|
||||
apiGroup.POST("/profile/update", apiHandler.UpdateProfile)
|
||||
apiGroup.POST("/profile/update/password", apiHandler.UpdatePassword)
|
||||
|
||||
// Passkey management
|
||||
apiGroup.POST("/webauthn/register/begin", apiHandler.PasskeyRegisterBegin)
|
||||
apiGroup.POST("/webauthn/register/complete", apiHandler.PasskeyRegisterComplete)
|
||||
apiGroup.GET("/webauthn/passkeys", apiHandler.PasskeyList)
|
||||
apiGroup.DELETE("/webauthn/passkeys/:id", apiHandler.PasskeyDelete)
|
||||
|
||||
// User management (admin)
|
||||
apiGroup.GET("/users", apiHandler.ListUsers)
|
||||
apiGroup.GET("/users/:id", apiHandler.GetUser)
|
||||
|
||||
Reference in New Issue
Block a user