v0.1
This commit is contained in:
50
internal/shared/middleware/api_auth.go
Normal file
50
internal/shared/middleware/api_auth.go
Normal file
@@ -0,0 +1,50 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"tyapi-server/internal/config"
|
||||
"tyapi-server/internal/shared/interfaces"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
// ApiAuthMiddleware API认证中间件
|
||||
type ApiAuthMiddleware struct {
|
||||
config *config.Config
|
||||
logger *zap.Logger
|
||||
responseBuilder interfaces.ResponseBuilder
|
||||
}
|
||||
|
||||
// NewApiAuthMiddleware 创建API认证中间件
|
||||
func NewApiAuthMiddleware(cfg *config.Config, logger *zap.Logger, responseBuilder interfaces.ResponseBuilder) *ApiAuthMiddleware {
|
||||
return &ApiAuthMiddleware{
|
||||
config: cfg,
|
||||
logger: logger,
|
||||
responseBuilder: responseBuilder,
|
||||
}
|
||||
}
|
||||
|
||||
// GetName 返回中间件名称
|
||||
func (m *ApiAuthMiddleware) GetName() string {
|
||||
return "api_auth"
|
||||
}
|
||||
|
||||
// GetPriority 返回中间件优先级
|
||||
func (m *ApiAuthMiddleware) GetPriority() int {
|
||||
return 60 // 中等优先级,在日志之后,业务处理之前
|
||||
}
|
||||
|
||||
// Handle 返回中间件处理函数
|
||||
func (m *ApiAuthMiddleware) Handle() gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
// 获取客户端IP地址,并存入上下文
|
||||
clientIP := c.ClientIP()
|
||||
c.Set("client_ip", clientIP)
|
||||
c.Next()
|
||||
}
|
||||
}
|
||||
|
||||
// IsGlobal 是否为全局中间件
|
||||
func (m *ApiAuthMiddleware) IsGlobal() bool {
|
||||
return false
|
||||
}
|
||||
72
internal/shared/middleware/domain.go
Normal file
72
internal/shared/middleware/domain.go
Normal file
@@ -0,0 +1,72 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"tyapi-server/internal/config"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
// DomainAuthMiddleware 域名认证中间件
|
||||
type DomainAuthMiddleware struct {
|
||||
config *config.Config
|
||||
logger *zap.Logger
|
||||
}
|
||||
|
||||
// NewDomainAuthMiddleware 创建域名认证中间件
|
||||
func NewDomainAuthMiddleware(cfg *config.Config, logger *zap.Logger) *DomainAuthMiddleware {
|
||||
return &DomainAuthMiddleware{
|
||||
config: cfg,
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
|
||||
// GetName 返回中间件名称
|
||||
func (m *DomainAuthMiddleware) GetName() string {
|
||||
return "domain_auth"
|
||||
}
|
||||
|
||||
// GetPriority 返回中间件优先级
|
||||
func (m *DomainAuthMiddleware) GetPriority() int {
|
||||
return 100
|
||||
}
|
||||
|
||||
// Handle 返回中间件处理函数
|
||||
func (m *DomainAuthMiddleware) Handle(domain string) gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
|
||||
// 开发环境下跳过外部验证
|
||||
if m.config.App.IsDevelopment() {
|
||||
m.logger.Info("开发环境:跳过域名验证",
|
||||
zap.String("domain", domain))
|
||||
c.Next()
|
||||
}
|
||||
if domain == "" {
|
||||
domain = m.config.API.Domain
|
||||
}
|
||||
host := c.Request.Host
|
||||
|
||||
// 移除端口部分
|
||||
if idx := strings.Index(host, ":"); idx != -1 {
|
||||
host = host[:idx]
|
||||
}
|
||||
|
||||
if host == domain {
|
||||
// 设置域名匹配标记
|
||||
c.Set("domainMatched", domain)
|
||||
c.Next()
|
||||
} else {
|
||||
// 不匹配域名,跳过当前组处理,继续执行其他路由
|
||||
c.Abort()
|
||||
return
|
||||
}
|
||||
|
||||
c.Next()
|
||||
}
|
||||
}
|
||||
|
||||
// IsGlobal 是否为全局中间件
|
||||
func (m *DomainAuthMiddleware) IsGlobal() bool {
|
||||
return false
|
||||
}
|
||||
Reference in New Issue
Block a user