Files
web_hgdjb_server/pub/common/enum/redisconst/const.go
T
rootandClaude Opus 4.7 cd8dea8787 同步 web_hga 的五项改造
- 移除 买点 (user acquisition tracking) 子系统:dataReport SDK、eventmod
  事件模型、reportdata 定时上报 job、reportser/srv_report 包装层,以及业务
  侧的 ~20 处 Report* 调用点;去掉 proto.ConfigInfo 的 ReportSDKConfig
  字段、DataReport yaml 配置块和 pubdef.TrackerAppId。
- 广告获取改走 versionUrl /api/stat/advitise/v2/get(appId=12),移除
  adcenter(Jt) 调用;新增 POST /api/app/ads/click 异步上报;
  proto.AdvitiseData 别名 proxy.AdvitiseData,AList/BList 改名
  AppInfoAList/AppInfoBList。
- web 后台登录取消谷歌验证码(srv_mwacc.AccLogin 去掉 code 参数),密码
  正确即发放 token。
- app 端取消注册/登录/找回密码/游客登录接口及密码、token 相关代码;鉴权
  中间件按 X-User-Agent 中的 devID 识别用户,首次访问自动建号,Redis 缓存
  10 分钟;修改资料不再支持改密码。
- app m3u8 ticket 校验失败不再降级到 fallback 路径,仍按原 m3u8Name 返回。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-11-07 11:22:25 +08:00

226 lines
6.3 KiB
Go

package redisconst
import (
"fmt"
"strings"
"time"
"videoweb/pub/pubdef"
)
const (
visitLogFmt = "bd_visitlog:%s:%d"
FiveMVisit = "bd_visitFmt:%s"
BloomUser = "bd_bloom_user:%d"
AppUserToken = "bd_app_user_token:%d"
appDeviceUserFmt = "app:device:user:%s"
appDeviceUserLockFmt = "app:device:user:lock:%s"
AppDeviceUserExpire = 10 * time.Minute
AppDeviceUserLockExpire = 5 * time.Second
captchaKey = "bd_captcha_mobile_%s"
CaptchaExpire = 5 * time.Minute
replayNonceKey = "bd_replay:nonce:_%s"
mediaM3U8Fmt = "m3u8cache:%s"
MediaM3U8CacheExpire = time.Hour * 24 * 7
appPlayletHomeCacheFmt = "app:playlet:home:%d:%s"
appPlayletHomeCacheKeyFmt = "app:playlet:home:%d"
appPlayletHomeCacheVersionFmt = "app:playlet:home:version:%d"
AppPlayletHomeCacheExpire = 10 * time.Minute
AppPlayletForwardHeatExpire = 3 * time.Second
//禁止登陆设置
userForbit = "userForbit:%d"
ipForbit = "ipForbit:%s"
//每分钟Ip注册次数
registerLimist = "registerLimit:%s"
RegisterLimistExpire = time.Minute * 30
//用户关注限制
careLimitKey = "carelimit:%d"
CareLimitKeyExpire = 15 * time.Second
//用户评论限制
commentLimitKey = "commentlimit:%s"
CommentLimitKeyExpire = 5 * time.Second
CommentDayLimitKeyExpire = 10 * time.Hour
ContactUsLimitKey = "contactuslimit:%s"
ContactusLimitKeyExpire = 1 * time.Minute
ContactusLimitKeyDayExpire = 10
//每用户访问次数限制
userCallLimit = "userCall:%d"
ipCallLimit = "ipCall:%s"
CallLimitExpire = time.Second * 10
userSidKey = "userSid:%d"
UserSidKeyExpire = time.Minute * 30
// 访问 IP 去重统计:每个 appId 每天一个 SET
ipStatKey = "ipstat:%d:%s"
IpStatExpire = 49 * time.Hour
// m3u8 / enkey 防盗链
m3u8DayRateLimitIp = "m3u8dayrate:ip:%s:%s"
m3u8DayRateLimitUser = "m3u8dayrate:user:%d:%s"
m3u8DailyMediaIpFmt = "m3u8:daily:media:ip:%s:%d:%s"
m3u8DailyMediaUserFmt = "m3u8:daily:media:user:%d:%d:%s"
m3u8UserVipExpireFmt = "m3u8:user:vipExpire:%d"
M3U8DayRateLimitMax = int64(500) // 非有效会员/未登录:按 IP 日限
M3U8DayRateLimitVipMax = int64(1000) // 有效会员:按用户日限
M3U8UserVipExpireCache = 5 * time.Minute
)
func BloomUserKey(userId int64) string {
return fmt.Sprintf(BloomUser, userId)
}
func FiveMVisitKey(time string) string {
return fmt.Sprintf(FiveMVisit, time)
}
func UserVisitLogKey(uid int64, t time.Time) string {
return fmt.Sprintf(visitLogFmt, t.Format("20060102"), uid)
}
func MobileCaptchaKey(mobile string) string {
return fmt.Sprintf(captchaKey, mobile)
}
func AppUserTokenKey(userId int64) string {
return fmt.Sprintf(AppUserToken, userId)
}
func MediaM3U8Key(name string) string {
return fmt.Sprintf(mediaM3U8Fmt, name)
}
func AppPlayletHomeCacheKey() string {
return fmt.Sprintf(appPlayletHomeCacheKeyFmt, pubdef.AppId)
}
func AppPlayletHomeCacheVersionKey() string {
return fmt.Sprintf(appPlayletHomeCacheVersionFmt, pubdef.AppId)
}
func AppPlayletHomeCacheDataKey(version string) string {
return fmt.Sprintf(appPlayletHomeCacheFmt, pubdef.AppId, version)
}
func AppPlayletForwardHeatKey(operator string, playletId int64) string {
operator = strings.ReplaceAll(operator, ":", "-")
return fmt.Sprintf("app:playlet:forward:heat:%s:%d", operator, playletId)
}
func UserForbitKey(userId int64) string {
return fmt.Sprintf(userForbit, userId)
}
func RegisterLimitKey(ip string) string {
ip = strings.ReplaceAll(ip, ":", "-")
return fmt.Sprintf(registerLimist, ip)
}
func CareLimitKey(userId int64) string {
return fmt.Sprintf(careLimitKey, userId)
}
func ReplayNonceKey(nonce string) string {
return fmt.Sprintf(replayNonceKey, nonce)
}
func CommentLimitKey(ip string) string {
return fmt.Sprintf(commentLimitKey, ip)
}
func CommentOneDayLimitKey(ip string) string {
return fmt.Sprintf("commentdaylimit:%s", ip)
}
func UserCallLimitKey(userId int64) string {
return fmt.Sprintf(userCallLimit, userId)
}
func IpCallLimitKey(ip string) string {
return fmt.Sprintf(ipCallLimit, ip)
}
func IpForbitKey(ip string) string {
ip = strings.ReplaceAll(ip, ":", "-")
return fmt.Sprintf(ipForbit, ip)
}
func UserSidKey(userId int64) string {
return fmt.Sprintf(userSidKey, userId)
}
func IpStatKey(appId int64, date string) string {
return fmt.Sprintf(ipStatKey, appId, date)
}
func M3U8DayRateLimitIpKey(ip string) string {
ip = normalizeM3U8Ip(ip)
loc, err := time.LoadLocation("Asia/Shanghai")
if err != nil {
loc = time.Local
}
day := time.Now().In(loc).Format("20060102")
return fmt.Sprintf(m3u8DayRateLimitIp, ip, day)
}
func M3U8DayRateLimitUserKey(userId int64) string {
loc, err := time.LoadLocation("Asia/Shanghai")
if err != nil {
loc = time.Local
}
day := time.Now().In(loc).Format("20060102")
return fmt.Sprintf(m3u8DayRateLimitUser, userId, day)
}
func M3U8DayRateLimitExpire() time.Duration {
loc, err := time.LoadLocation("Asia/Shanghai")
if err != nil {
loc = time.Local
}
now := time.Now().In(loc)
next := time.Date(now.Year(), now.Month(), now.Day()+1, 0, 0, 0, 0, loc)
d := next.Sub(now)
if d < time.Minute {
return time.Minute
}
return d
}
func normalizeM3U8Ip(ip string) string {
return strings.ReplaceAll(ip, ":", "-")
}
func M3U8DailyMediaIpKey(ip string, mediaId int64) string {
loc, err := time.LoadLocation("Asia/Shanghai")
if err != nil {
loc = time.Local
}
day := time.Now().In(loc).Format("20060102")
return fmt.Sprintf(m3u8DailyMediaIpFmt, normalizeM3U8Ip(ip), mediaId, day)
}
func M3U8DailyMediaUserKey(userId int64, mediaId int64) string {
loc, err := time.LoadLocation("Asia/Shanghai")
if err != nil {
loc = time.Local
}
day := time.Now().In(loc).Format("20060102")
return fmt.Sprintf(m3u8DailyMediaUserFmt, userId, mediaId, day)
}
func M3U8UserVipExpireKey(userId int64) string {
return fmt.Sprintf(m3u8UserVipExpireFmt, userId)
}
// AppDeviceUserKey 设备ID到用户ID的缓存
func AppDeviceUserKey(devID string) string {
return fmt.Sprintf(appDeviceUserFmt, devID)
}
// AppDeviceUserLockKey 按设备ID创建用户时的并发锁
func AppDeviceUserLockKey(devID string) string {
return fmt.Sprintf(appDeviceUserLockFmt, devID)
}