32 lines
707 B
Go
32 lines
707 B
Go
// Filename: internal/middleware/security.go
|
||
|
||
package middleware
|
||
|
||
import (
|
||
"gemini-balancer/internal/service"
|
||
"gemini-balancer/internal/settings"
|
||
"net/http"
|
||
|
||
"github.com/gin-gonic/gin"
|
||
)
|
||
|
||
func IPBanMiddleware(securityService *service.SecurityService, settingsManager *settings.SettingsManager) gin.HandlerFunc {
|
||
return func(c *gin.Context) {
|
||
if !settingsManager.IsIPBanEnabled() {
|
||
c.Next()
|
||
return
|
||
}
|
||
ip := c.ClientIP()
|
||
isBanned, err := securityService.IsIPBanned(c.Request.Context(), ip)
|
||
if err != nil {
|
||
c.Next()
|
||
return
|
||
}
|
||
if isBanned {
|
||
c.AbortWithStatusJSON(http.StatusForbidden, gin.H{"error": "您的IP已被暂时封禁,请稍后再试"})
|
||
return
|
||
}
|
||
c.Next()
|
||
}
|
||
}
|