Documentation
¶
Index ¶
- Constants
- func APIVersionMiddleware() gin.HandlerFunc
- func AuthRateLimiter(perWindow int, window time.Duration, burst int) gin.HandlerFunc
- func CSRFMiddleware(config *SecurityConfig) gin.HandlerFunc
- func CircuitBreakerMiddleware() gin.HandlerFunc
- func CombinedTimeoutCircuitMiddleware() gin.HandlerFunc
- func DeprecationHeaders(sunset string) gin.HandlerFunc
- func ErrorHandler() gin.HandlerFunc
- func GetCircuitBreakerStats() map[string]interface{}
- func IPACLDecision(globalBlocked, globalAllowed, routeBlocked, routeAllowed IPList, ...) (allowed bool, reason string)
- func InitRedisRateBackend(addr, password string) error
- func InitTimeoutCircuitManager(timeoutCfg TimeoutConfig, cbCfg CircuitBreakerConfig, ...)
- func InjectDB(db *gorm.DB) gin.HandlerFunc
- func InputValidationMiddleware() gin.HandlerFunc
- func LoggerMiddleware(log *zap.Logger) gin.HandlerFunc
- func MaintenanceMode(bypass MaintenanceBypassFunc) gin.HandlerFunc
- func MarkOperationLogged(c *gin.Context)
- func OperationAlreadyLogged(c *gin.Context) bool
- func PanicRecovery() gin.HandlerFunc
- func RedisAllow(key string, limit int, window time.Duration) bool
- func RedisRateEnabled() bool
- func ReqIDFromGin(c *gin.Context) string
- func RequestIDMiddleware() gin.HandlerFunc
- func SanitizeString(input string) string
- func SecureCompare(a, b string) bool
- func SecurityMiddleware(config *SecurityConfig) gin.HandlerFunc
- func SetMaintenanceAllowedPaths(paths, prefixes []string)
- func SetSkipAccessLogPaths(paths []string)
- func TimeoutMiddleware() gin.HandlerFunc
- func ValidateEmail(email string) bool
- func ValidatePassword(password string) error
- func WriteError(c *gin.Context, err error)
- func XSSProtectionMiddleware() gin.HandlerFunc
- type Breaker
- type BreakerFactory
- type CircuitBreaker
- type CircuitBreakerConfig
- type CircuitBreakerState
- type IPACLRule
- type IPList
- type MaintenanceBypassFunc
- type SecurityConfig
- type TimeoutCircuitManager
- type TimeoutConfig
Constants ¶
const ( HeaderAPIVersion = "X-API-Version" APIVersionV1 = "v1" )
const ( EnvMaintenanceMode = "MAINTENANCE_MODE" EnvMaintenanceMessage = "MAINTENANCE_MESSAGE" )
Variables ¶
This section is empty.
Functions ¶
func APIVersionMiddleware ¶ added in v0.2.1
func APIVersionMiddleware() gin.HandlerFunc
APIVersionMiddleware accepts X-API-Version (default v1), echoes it on the response, and returns 400 for unsupported versions (only v1 today).
func AuthRateLimiter ¶ added in v0.2.1
AuthRateLimiter returns a gin middleware that throttles requests by client IP. perWindow specifies how many requests are allowed in the rolling window of length window; burst is the initial token bucket capacity (controls "thundering" behaviour at process start).
Returns 429 with a Retry-After-style hint when the limit is exceeded. nil-safe: zero values fall back to safe defaults (5 req / 5 min).
func CSRFMiddleware ¶ added in v0.2.1
func CSRFMiddleware(config *SecurityConfig) gin.HandlerFunc
CSRFMiddleware CSRF保护中间件
func CircuitBreakerMiddleware ¶ added in v0.2.1
func CircuitBreakerMiddleware() gin.HandlerFunc
CircuitBreakerMiddleware 熔断器中间件
func CombinedTimeoutCircuitMiddleware ¶ added in v0.2.1
func CombinedTimeoutCircuitMiddleware() gin.HandlerFunc
CombinedTimeoutCircuitMiddleware 组合超时和熔断中间件。 Respects enableTimeout / enableCircuitBreaker set via InitTimeoutCircuitManager.
func DeprecationHeaders ¶ added in v0.2.1
func DeprecationHeaders(sunset string) gin.HandlerFunc
DeprecationHeaders sets RFC 8594-style Deprecation / Sunset response headers on marked routes. sunset is an HTTP-date or opaque token (e.g. "2027-01-01").
func ErrorHandler ¶ added in v0.2.1
func ErrorHandler() gin.HandlerFunc
ErrorHandler is a Gin middleware that recovers from panics and converts them to structured AppError responses. It also handles any errors stored in the gin.Context via c.Error().
func GetCircuitBreakerStats ¶ added in v0.2.1
func GetCircuitBreakerStats() map[string]interface{}
GetCircuitBreakerStats 获取所有熔断器统计信息
func IPACLDecision ¶ added in v0.2.1
func IPACLDecision(globalBlocked, globalAllowed, routeBlocked, routeAllowed IPList, clientIP string) (allowed bool, reason string)
IPACLDecision evaluates block-first, then allow-if-configured semantics.
func InitRedisRateBackend ¶ added in v0.2.1
func InitTimeoutCircuitManager ¶ added in v0.2.1
func InitTimeoutCircuitManager(timeoutCfg TimeoutConfig, cbCfg CircuitBreakerConfig, enableTimeout, enableCircuitBreaker bool)
InitTimeoutCircuitManager configures the global timeout/circuit manager from app config. Safe to call once at startup; subsequent calls are no-ops (sync.Once).
func InputValidationMiddleware ¶ added in v0.2.1
func InputValidationMiddleware() gin.HandlerFunc
InputValidationMiddleware 输入验证中间件
func LoggerMiddleware ¶ added in v0.2.1
func LoggerMiddleware(log *zap.Logger) gin.HandlerFunc
LoggerMiddleware logs completed HTTP requests (requires RequestIDMiddleware first). log is kept for API compatibility; logging uses logger.*Ctx on the global logger.
func MaintenanceMode ¶ added in v0.2.1
func MaintenanceMode(bypass MaintenanceBypassFunc) gin.HandlerFunc
MaintenanceMode returns 503 for non-probe routes when MAINTENANCE_MODE=true. bypass (optional) lets specific requests (e.g. platform admins) through.
func MarkOperationLogged ¶ added in v0.2.1
MarkOperationLogged records that this HTTP request already wrote an operation log.
func OperationAlreadyLogged ¶ added in v0.2.1
OperationAlreadyLogged reports whether an operation log was written for this request.
func PanicRecovery ¶ added in v0.2.1
func PanicRecovery() gin.HandlerFunc
PanicRecovery logs panics and returns 500.
func RedisAllow ¶ added in v0.2.1
RedisAllow is a minimal fixed-window counter shared across replicas.
func RedisRateEnabled ¶ added in v0.2.1
func RedisRateEnabled() bool
func ReqIDFromGin ¶ added in v0.2.1
ReqIDFromGin is a convenience alias for ginlogger.ReqIDFromGin.
func RequestIDMiddleware ¶ added in v0.2.1
func RequestIDMiddleware() gin.HandlerFunc
RequestIDMiddleware assigns X-Reqid on every HTTP request (reuse inbound header or generate). Must run before LoggerMiddleware and handlers so logger.*Ctx helpers see the id.
func SanitizeString ¶ added in v0.2.1
SanitizeString 清理字符串,移除危险字符
func SecureCompare ¶ added in v0.2.1
SecureCompare 安全比较字符串,防止时序攻击
func SecurityMiddleware ¶ added in v0.2.1
func SecurityMiddleware(config *SecurityConfig) gin.HandlerFunc
SecurityMiddleware 安全中间件
func SetMaintenanceAllowedPaths ¶ added in v0.2.1
func SetMaintenanceAllowedPaths(paths, prefixes []string)
SetMaintenanceAllowedPaths configures which paths/prefixes stay open during maintenance mode. Pass nil/empty to clear. Must be called before the middleware is first invoked.
func SetSkipAccessLogPaths ¶ added in v0.2.1
func SetSkipAccessLogPaths(paths []string)
SetSkipAccessLogPaths configures which path substrings should skip access logging. Pass nil/empty to clear. Must be called before the middleware is first invoked (not safe to mutate concurrently with request handling).
func TimeoutMiddleware ¶ added in v0.2.1
func TimeoutMiddleware() gin.HandlerFunc
TimeoutMiddleware 超时中间件
func ValidatePassword ¶ added in v0.2.1
ValidatePassword 验证密码强度
func WriteError ¶ added in v0.2.1
WriteError is a convenience helper to attach an error to the context and abort.
func XSSProtectionMiddleware ¶ added in v0.2.1
func XSSProtectionMiddleware() gin.HandlerFunc
XSSProtectionMiddleware XSS防护中间件
Types ¶
type Breaker ¶ added in v0.2.1
type Breaker interface {
Allow() error
MarkSuccess()
MarkFailed()
}
Breaker is the circuit-breaker interface used by the timeout/circuit middleware. Both ling-base/circuitbreaker.CircuitBreaker and circuitbreaker.SREBreaker satisfy this interface, so applications can choose the strategy that fits their traffic profile.
type BreakerFactory ¶ added in v0.2.1
BreakerFactory creates a Breaker for a given endpoint key. Used by TimeoutCircuitManager to lazily create per-endpoint breakers.
func DefaultBreakerFactory ¶ added in v0.2.1
func DefaultBreakerFactory(cfg circuitbreaker.Config) BreakerFactory
DefaultBreakerFactory returns a factory that creates circuitbreaker.CircuitBreaker instances with the given config.
func NoopBreakerFactory ¶ added in v0.2.1
func NoopBreakerFactory() BreakerFactory
NoopBreakerFactory returns a factory that creates breakers which never reject. Useful for disabling circuit breaking while keeping the middleware chain intact.
func SREBreakerFactory ¶ added in v0.2.1
func SREBreakerFactory(opts ...circuitbreaker.SREOption) BreakerFactory
SREBreakerFactory returns a factory that creates SRE-style adaptive breakers with the given options.
type CircuitBreaker ¶ added in v0.2.1
type CircuitBreaker struct {
// contains filtered or unexported fields
}
CircuitBreaker 熔断器
func NewCircuitBreaker ¶ added in v0.2.1
func NewCircuitBreaker(config CircuitBreakerConfig) *CircuitBreaker
NewCircuitBreaker 创建新的熔断器
func (*CircuitBreaker) Allow ¶ added in v0.2.1
func (cb *CircuitBreaker) Allow() bool
Allow 检查是否允许请求
func (*CircuitBreaker) GetState ¶ added in v0.2.1
func (cb *CircuitBreaker) GetState() CircuitBreakerState
GetState 获取熔断器状态
func (*CircuitBreaker) GetStats ¶ added in v0.2.1
func (cb *CircuitBreaker) GetStats() map[string]interface{}
GetStats 获取熔断器统计信息
func (*CircuitBreaker) RecordFailure ¶ added in v0.2.1
func (cb *CircuitBreaker) RecordFailure()
RecordFailure 记录失败
func (*CircuitBreaker) RecordSuccess ¶ added in v0.2.1
func (cb *CircuitBreaker) RecordSuccess()
RecordSuccess 记录成功
type CircuitBreakerConfig ¶ added in v0.2.1
type CircuitBreakerConfig struct {
// 失败阈值
FailureThreshold int
// 成功阈值(半开状态下)
SuccessThreshold int
// 超时时间
Timeout time.Duration
// 熔断器打开后的等待时间
OpenTimeout time.Duration
// 最大并发请求数
MaxConcurrentRequests int
}
CircuitBreakerConfig 熔断器配置
func DefaultCircuitBreakerConfig ¶ added in v0.2.1
func DefaultCircuitBreakerConfig() CircuitBreakerConfig
DefaultCircuitBreakerConfig 默认熔断器配置
type CircuitBreakerState ¶ added in v0.2.1
type CircuitBreakerState int
CircuitBreakerState 熔断器状态
const ( StateClosed CircuitBreakerState = iota StateHalfOpen StateOpen )
type IPList ¶ added in v0.2.1
IPList holds parsed IP/CIDR entries for allow/block checks.
func ParseIPList ¶ added in v0.2.1
ParseIPList parses a comma-separated list of IPs and CIDRs. "*" means allow any (used by allowlists only).
type MaintenanceBypassFunc ¶ added in v0.2.1
MaintenanceBypassFunc returns true if the request should bypass maintenance. Apps can plug in their own admin-token check here; nil means no bypass.
type SecurityConfig ¶ added in v0.2.1
type SecurityConfig struct {
// CSRF配置
CSRFSecret string `json:"csrf_secret"`
CSRFTokenName string `json:"csrf_token_name"`
CSRFMaxAge time.Duration `json:"csrf_max_age"`
CSRFSecure bool `json:"csrf_secure"`
CSRFHttpOnly bool `json:"csrf_http_only"`
CSRFSameSite csrf.SameSiteMode `json:"csrf_same_site"`
// XSS配置
XSSProtection bool `json:"xss_protection"`
ContentTypeNosniff bool `json:"content_type_nosniff"`
XFrameOptions string `json:"x_frame_options"`
// 输入验证配置
MaxRequestSize int64 `json:"max_request_size"`
AllowedOrigins []string `json:"allowed_origins"`
// 安全头配置
HSTSMaxAge int `json:"hsts_max_age"`
ReferrerPolicy string `json:"referrer_policy"`
}
SecurityConfig 安全配置
func DefaultSecurityConfig ¶ added in v0.2.1
func DefaultSecurityConfig() *SecurityConfig
DefaultSecurityConfig 默认安全配置
type TimeoutCircuitManager ¶ added in v0.2.1
type TimeoutCircuitManager struct {
// contains filtered or unexported fields
}
TimeoutCircuitManager 超时和熔断管理器
func GetTimeoutCircuitManager ¶ added in v0.2.1
func GetTimeoutCircuitManager() *TimeoutCircuitManager
GetTimeoutCircuitManager 获取全局超时熔断管理器
func NewTimeoutCircuitManager ¶ added in v0.2.1
func NewTimeoutCircuitManager(timeoutConfig TimeoutConfig, cbConfig CircuitBreakerConfig) *TimeoutCircuitManager
NewTimeoutCircuitManager 创建超时和熔断管理器
func (*TimeoutCircuitManager) SetBreakerFactory ¶ added in v0.2.1
func (m *TimeoutCircuitManager) SetBreakerFactory(f BreakerFactory)
SetBreakerFactory overrides the default breaker creation strategy. Pass DefaultBreakerFactory, SREBreakerFactory, or a custom factory. Must be called before the middleware is first invoked.
func (*TimeoutCircuitManager) SetLongLivedPrefixes ¶ added in v0.2.1
func (m *TimeoutCircuitManager) SetLongLivedPrefixes(prefixes []string)
SetLongLivedPrefixes registers additional path prefixes that should skip timeout/circuit wrapping (e.g. WebSocket / SSE / streaming endpoints).
type TimeoutConfig ¶ added in v0.2.1
type TimeoutConfig struct {
// 默认超时时间
DefaultTimeout time.Duration
// 接口级别超时配置
EndpointTimeouts map[string]time.Duration
// 超时后的降级响应
FallbackResponse interface{}
}
TimeoutConfig 超时配置
func DefaultTimeoutConfig ¶ added in v0.2.1
func DefaultTimeoutConfig() TimeoutConfig
DefaultTimeoutConfig 默认超时配置(仅包含探针,应用可自行注入 EndpointTimeouts)