diff --git a/internal/config/config.go b/internal/config/config.go index 476cdda..a8b141f 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -87,12 +87,11 @@ type RegisterConfig struct { TrialSubscribe int64 `yaml:"TrialSubscribe" default:"0"` TrialTime int64 `yaml:"TrialTime" default:"0"` TrialTimeUnit string `yaml:"TrialTimeUnit" default:""` + TrialEmailDomainWhitelist string `yaml:"TrialEmailDomainWhitelist" default:""` IpRegisterLimit int64 `yaml:"IpRegisterLimit" default:"0"` IpRegisterLimitDuration int64 `yaml:"IpRegisterLimitDuration" default:"0"` EnableIpRegisterLimit bool `yaml:"EnableIpRegisterLimit" default:"false"` DeviceLimit int64 `yaml:"DeviceLimit" default:"2"` - EnableTrialEmailWhitelist bool `yaml:"EnableTrialEmailWhitelist" default:"false"` - TrialEmailDomainWhitelist string `yaml:"TrialEmailDomainWhitelist" default:""` } type EmailConfig struct { diff --git a/internal/logic/auth/emailLoginLogic.go b/internal/logic/auth/emailLoginLogic.go index e4fb016..a875709 100644 --- a/internal/logic/auth/emailLoginLogic.go +++ b/internal/logic/auth/emailLoginLogic.go @@ -126,7 +126,7 @@ func (l *EmailLoginLogic) EmailLogin(req *types.EmailLoginRequest) (resp *types. return err } rc := l.svcCtx.Config.Register - if rc.EnableTrial && (!rc.EnableTrialEmailWhitelist || IsEmailDomainWhitelisted(req.Email, rc.TrialEmailDomainWhitelist)) { + if rc.EnableTrial && rc.TrialEmailDomainWhitelist != "" && IsEmailDomainWhitelisted(req.Email, rc.TrialEmailDomainWhitelist) { if err = l.activeTrial(userInfo.Id); err != nil { return err } diff --git a/internal/logic/auth/oauth/oAuthLoginGetTokenLogic.go b/internal/logic/auth/oauth/oAuthLoginGetTokenLogic.go index 58b75f4..f8182db 100644 --- a/internal/logic/auth/oauth/oAuthLoginGetTokenLogic.go +++ b/internal/logic/auth/oauth/oAuthLoginGetTokenLogic.go @@ -395,8 +395,8 @@ func (l *OAuthLoginGetTokenLogic) register(email, avatar, method, openid, reques } rc := l.svcCtx.Config.Register - // Only activate trial if whitelist is not enabled, or email domain matches whitelist - shouldActivateTrial := rc.EnableTrial && (!rc.EnableTrialEmailWhitelist || (email != "" && l.isEmailDomainWhitelisted(email, rc.TrialEmailDomainWhitelist))) + // Only activate trial if email domain is in whitelist (whitelist cannot be empty) + shouldActivateTrial := rc.EnableTrial && rc.TrialEmailDomainWhitelist != "" && (email != "" && l.isEmailDomainWhitelisted(email, rc.TrialEmailDomainWhitelist)) if shouldActivateTrial { l.Debugw("activating trial subscription", diff --git a/internal/logic/auth/userRegisterLogic.go b/internal/logic/auth/userRegisterLogic.go index 710dff1..90c06bf 100644 --- a/internal/logic/auth/userRegisterLogic.go +++ b/internal/logic/auth/userRegisterLogic.go @@ -148,7 +148,7 @@ func (l *UserRegisterLogic) UserRegister(req *types.UserRegisterRequest) (resp * // Activate trial subscription after transaction success (moved outside transaction to reduce lock time) rc := l.svcCtx.Config.Register - if rc.EnableTrial && (!rc.EnableTrialEmailWhitelist || IsEmailDomainWhitelisted(req.Email, rc.TrialEmailDomainWhitelist)) { + if rc.EnableTrial && rc.TrialEmailDomainWhitelist != "" && IsEmailDomainWhitelisted(req.Email, rc.TrialEmailDomainWhitelist) { trialSubscribe, err = l.activeTrial(userInfo.Id) if err != nil { l.Errorw("Failed to activate trial subscription", logger.Field("error", err.Error())) diff --git a/internal/logic/public/user/bindEmailWithVerificationLogic.go b/internal/logic/public/user/bindEmailWithVerificationLogic.go index 2f69725..d2f5924 100644 --- a/internal/logic/public/user/bindEmailWithVerificationLogic.go +++ b/internal/logic/public/user/bindEmailWithVerificationLogic.go @@ -209,13 +209,13 @@ func (l *BindEmailWithVerificationLogic) refreshBindSessionToken(userId int64) ( } // tryGrantTrialOnEmailBind grants trial subscription to the email user (family owner) -// if EnableTrial is on and (if whitelist is enabled, email domain must match). +// if email domain is in the configured whitelist (or if whitelist is empty, no trial is granted). func (l *BindEmailWithVerificationLogic) tryGrantTrialOnEmailBind(ownerUserId int64, email string) { rc := l.svcCtx.Config.Register - if !rc.EnableTrial { + if !rc.EnableTrial || rc.TrialEmailDomainWhitelist == "" { return } - if rc.EnableTrialEmailWhitelist && !auth.IsEmailDomainWhitelisted(email, rc.TrialEmailDomainWhitelist) { + if !auth.IsEmailDomainWhitelisted(email, rc.TrialEmailDomainWhitelist) { l.Infow("email domain not in trial whitelist, skip", logger.Field("email", email), logger.Field("owner_user_id", ownerUserId),