package auth const ( // LoginIPRiskStatusPending 表示任务已落库但尚未被 worker claim。 LoginIPRiskStatusPending = "pending" // LoginIPRiskStatusRunning 表示任务已被某个 worker 租约锁定。 LoginIPRiskStatusRunning = "running" // LoginIPRiskStatusCompleted 表示任务已有 blocked/allowed/unknown 决策。 LoginIPRiskStatusCompleted = "completed" // LoginIPRiskStatusFailed 表示本次处理失败,后续可按锁和 attempt 重试。 LoginIPRiskStatusFailed = "failed" // LoginIPRiskStatusSkipped 表示已有新鲜决策,本任务不再访问 provider。 LoginIPRiskStatusSkipped = "skipped" // LoginIPRiskDecisionBlocked 表示 IP 国家命中不支持国家。 LoginIPRiskDecisionBlocked = "blocked" // LoginIPRiskDecisionAllowed 表示 IP 国家未命中不支持国家。 LoginIPRiskDecisionAllowed = "allowed" // LoginIPRiskDecisionUnknown 表示 provider 全部不可用或没有可解析国家。 LoginIPRiskDecisionUnknown = "unknown" ) // LoginIPRiskJob 是登录成功后异步复核入口 IP 的持久任务。 type LoginIPRiskJob struct { AppCode string JobID string SessionID string UserID int64 ClientIP string ClientIPHash string Channel string Platform string Language string Timezone string RequestID string EdgeCountryCode string Status string Decision string CountryCode string FailureReason string LockedBy string LockedUntilMs int64 AttemptCount int CreatedAtMs int64 UpdatedAtMs int64 } // LoginIPRiskDecision 记录一次 IP Geo 决策,Redis 只保存它的快查投影。 type LoginIPRiskDecision struct { AppCode string DecisionID string ClientIP string ClientIPHash string Decision string CountryCode string Confidence int ProviderAttemptsJSON string DecidedAtMs int64 ExpiresAtMs int64 CreatedAtMs int64 } // LoginRiskCountryBlock 是后台维护的国家屏蔽词事实。 // CountryCode 为空时仅作为客户端词表下发;服务端 IP 风控只能稳定消费 provider 返回的国家码。 type LoginRiskCountryBlock struct { AppCode string BlockID int64 Keyword string CountryCode string Enabled bool CreatedAtMs int64 UpdatedAtMs int64 } // LoginRiskIPWhitelist 是后台维护的登录地区屏蔽 IP 白名单事实。 // IPAddress 使用 netip 标准化后的明文地址,便于运营审计和登录入口精确匹配。 type LoginRiskIPWhitelist struct { AppCode string WhitelistID int64 IPAddress string Enabled bool CreatedAtMs int64 UpdatedAtMs int64 } // RegisterRiskConfig 是注册链路的风控开关集合。 // 当前只包含单设备最大账号数,后续增加注册频率或设备指纹策略时仍可复用同一行 App 配置。 type RegisterRiskConfig struct { AppCode string MaxAccountsPerDevice int32 UpdatedByAdminID int64 CreatedAtMs int64 UpdatedAtMs int64 }