package middleware import ( "github.com/gin-gonic/gin" "github.com/spf13/viper" ) // ============================================================================ // 结构体定义 // ============================================================================ // DevModeConfig 开发模式配置 type DevModeConfig struct { // 是否跳过验证码验证 SkipCaptcha bool // 是否显示详细错误信息 ShowDetailedErrors bool // 是否启用调试日志 EnableDebugLog bool } // ============================================================================ // 中间件函数 // ============================================================================ // DevModeMiddleware 开发模式中间件 // 统一管理所有开发模式相关的功能 func DevModeMiddleware() gin.HandlerFunc { return func(c *gin.Context) { // 检查是否为开发模式 if IsDevMode() { // 设置开发模式标识到上下文 c.Set("dev_mode", true) c.Set("dev_config", GetDevModeConfig()) // 设置开发模式相关的响应头 c.Header("X-Dev-Mode", "true") } else { c.Set("dev_mode", false) } c.Next() } } // ============================================================================ // 公共函数 // ============================================================================ // IsDevMode 检查是否为开发模式 func IsDevMode() bool { return viper.GetBool("server.dev_mode") } // GetDevModeConfig 获取开发模式配置 func GetDevModeConfig() DevModeConfig { if !IsDevMode() { return DevModeConfig{} } return DevModeConfig{ SkipCaptcha: true, // 开发模式下默认跳过验证码 ShowDetailedErrors: true, // 开发模式下显示详细错误 EnableDebugLog: true, // 开发模式下启用调试日志 } } // IsDevModeFromContext 从上下文中检查是否为开发模式 func IsDevModeFromContext(c *gin.Context) bool { if devMode, exists := c.Get("dev_mode"); exists { if isDevMode, ok := devMode.(bool); ok { return isDevMode } } // 回退到配置检查 return IsDevMode() } // GetDevModeConfigFromContext 从上下文中获取开发模式配置 func GetDevModeConfigFromContext(c *gin.Context) DevModeConfig { if config, exists := c.Get("dev_config"); exists { if devConfig, ok := config.(DevModeConfig); ok { return devConfig } } // 回退到默认配置 return GetDevModeConfig() } // ShouldSkipCaptcha 检查是否应该跳过验证码验证 func ShouldSkipCaptcha(c *gin.Context) bool { config := GetDevModeConfigFromContext(c) return config.SkipCaptcha } // ============================================================================ // 私有函数 // ============================================================================