mirror of
https://github.com/teamhanko/hanko.git
synced 2025-10-27 22:27:23 +08:00
85 lines
2.6 KiB
Go
85 lines
2.6 KiB
Go
package handler
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/labstack/echo-contrib/echoprometheus"
|
|
"github.com/labstack/echo/v4"
|
|
"github.com/labstack/echo/v4/middleware"
|
|
"github.com/teamhanko/hanko/backend/config"
|
|
"github.com/teamhanko/hanko/backend/crypto/jwk"
|
|
"github.com/teamhanko/hanko/backend/dto"
|
|
hankoMiddleware "github.com/teamhanko/hanko/backend/middleware"
|
|
"github.com/teamhanko/hanko/backend/persistence"
|
|
"github.com/teamhanko/hanko/backend/template"
|
|
)
|
|
|
|
func NewAdminRouter(cfg *config.Config, persister persistence.Persister, prometheus echo.MiddlewareFunc) *echo.Echo {
|
|
e := echo.New()
|
|
e.Renderer = template.NewTemplateRenderer()
|
|
e.HideBanner = true
|
|
g := e.Group("")
|
|
|
|
e.HTTPErrorHandler = dto.NewHTTPErrorHandler(dto.HTTPErrorHandlerConfig{Debug: false, Logger: e.Logger})
|
|
e.Use(middleware.RequestID())
|
|
if cfg.Log.LogHealthAndMetrics {
|
|
e.Use(hankoMiddleware.GetLoggerMiddleware())
|
|
} else {
|
|
g.Use(hankoMiddleware.GetLoggerMiddleware())
|
|
}
|
|
|
|
e.Validator = dto.NewCustomValidator()
|
|
|
|
if prometheus != nil {
|
|
e.Use(prometheus)
|
|
e.GET("/metrics", echoprometheus.NewHandler())
|
|
}
|
|
|
|
statusHandler := NewStatusHandler(persister)
|
|
|
|
e.GET("/", statusHandler.Status)
|
|
|
|
healthHandler := NewHealthHandler()
|
|
|
|
health := e.Group("/health")
|
|
health.GET("/alive", healthHandler.Alive)
|
|
health.GET("/ready", healthHandler.Ready)
|
|
|
|
jwkManager, err := jwk.NewDefaultManager(cfg.Secrets.Keys, persister.GetJwkPersister())
|
|
if err != nil {
|
|
panic(fmt.Errorf("failed to create jwk manager: %w", err))
|
|
}
|
|
|
|
webhookMiddleware := hankoMiddleware.WebhookMiddleware(cfg, jwkManager, persister)
|
|
|
|
userHandler := NewUserHandlerAdmin(persister)
|
|
emailHandler := NewEmailAdminHandler(cfg, persister)
|
|
|
|
user := g.Group("/users")
|
|
user.GET("", userHandler.List)
|
|
user.POST("", userHandler.Create, webhookMiddleware)
|
|
user.GET("/:id", userHandler.Get)
|
|
user.DELETE("/:id", userHandler.Delete, webhookMiddleware)
|
|
|
|
email := user.Group("/:user_id/emails", webhookMiddleware)
|
|
email.GET("", emailHandler.List)
|
|
email.POST("", emailHandler.Create)
|
|
email.GET("/:email_id", emailHandler.Get)
|
|
email.DELETE("/:email_id", emailHandler.Delete)
|
|
email.POST("/:email_id/set_primary", emailHandler.SetPrimaryEmail)
|
|
|
|
auditLogHandler := NewAuditLogHandler(persister)
|
|
|
|
auditLogs := g.Group("/audit_logs")
|
|
auditLogs.GET("", auditLogHandler.List)
|
|
|
|
webhookHandler := NewWebhookHandler(cfg.Webhooks, persister)
|
|
webhooks := g.Group("/webhooks")
|
|
webhooks.GET("", webhookHandler.List)
|
|
webhooks.POST("", webhookHandler.Create)
|
|
webhooks.GET("/:id", webhookHandler.Get)
|
|
webhooks.DELETE("/:id", webhookHandler.Delete)
|
|
webhooks.PUT("/:id", webhookHandler.Update)
|
|
|
|
return e
|
|
}
|