73 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			73 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 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]
 | |
| 		}
 | |
| 		m.logger.Info("域名认证中间件检查", zap.String("host", host), zap.String("domain", domain))
 | |
| 		if host == domain || host == "api.tianyuanapi.com" || host == "apitest.tianyuanapi.com" {
 | |
| 			// 设置域名匹配标记
 | |
| 			c.Set("domainMatched", domain)
 | |
| 			c.Next()
 | |
| 		} else {
 | |
| 			// 不匹配域名,跳过当前组处理,继续执行其他路由
 | |
| 			c.Abort()
 | |
| 			return
 | |
| 		}
 | |
| 
 | |
| 		c.Next()
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // IsGlobal 是否为全局中间件
 | |
| func (m *DomainAuthMiddleware) IsGlobal() bool {
 | |
| 	return false
 | |
| }
 |