| 
									
										
										
										
											2025-07-28 01:46:39 +08:00
										 |  |  | 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] | 
					
						
							|  |  |  | 		} | 
					
						
							| 
									
										
										
										
											2025-07-28 22:39:09 +08:00
										 |  |  | 		m.logger.Info("域名认证中间件检查", zap.String("host", host), zap.String("domain", domain)) | 
					
						
							| 
									
										
										
										
											2025-08-02 05:38:35 +08:00
										 |  |  | 		if host == domain || host == "api.tianyuanapi.com" || host == "apitest.tianyuanapi.com" { | 
					
						
							| 
									
										
										
										
											2025-07-28 01:46:39 +08:00
										 |  |  | 			// 设置域名匹配标记 | 
					
						
							|  |  |  | 			c.Set("domainMatched", domain) | 
					
						
							|  |  |  | 			c.Next() | 
					
						
							|  |  |  | 		} else { | 
					
						
							|  |  |  | 			// 不匹配域名,跳过当前组处理,继续执行其他路由 | 
					
						
							|  |  |  | 			c.Abort() | 
					
						
							|  |  |  | 			return | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		c.Next() | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // IsGlobal 是否为全局中间件 | 
					
						
							|  |  |  | func (m *DomainAuthMiddleware) IsGlobal() bool { | 
					
						
							|  |  |  | 	return false | 
					
						
							|  |  |  | } |