package auth import ( "context" "strings" authdomain "hyapp/services/user-service/internal/domain/auth" ) // StaticThirdPartyVerifier 是测试和本地 mock verifier。 // credential 会被当作 provider_subject,不能用于 provider=firebase 或任何真实线上 provider。 type StaticThirdPartyVerifier struct { // allowed 保存 provider allowlist,key 已统一小写。 allowed map[string]bool } // NewStaticThirdPartyVerifier 创建 provider allowlist 校验器。 func NewStaticThirdPartyVerifier(providers []string) *StaticThirdPartyVerifier { allowed := make(map[string]bool, len(providers)) for _, provider := range providers { // provider 名统一小写和 trim,避免配置大小写影响登录。 provider = strings.ToLower(strings.TrimSpace(provider)) if provider != "" { allowed[provider] = true } } return &StaticThirdPartyVerifier{allowed: allowed} } // Verify 把 mock credential 解析为 provider_subject。 func (v *StaticThirdPartyVerifier) Verify(_ context.Context, provider string, credential string) (authdomain.ThirdPartyProfile, error) { // mock verifier 只服务显式 allowlist;provider=firebase 会被 RoutedThirdPartyVerifier 截获。 provider = strings.ToLower(strings.TrimSpace(provider)) subject := strings.TrimSpace(credential) if !v.allowed[provider] || subject == "" { // provider 不允许或 credential 为空都统一 AUTH_FAILED。 return authdomain.ThirdPartyProfile{}, authFailed() } return authdomain.ThirdPartyProfile{ProviderSubject: subject}, nil }