package configser import ( "context" "strings" "videoweb/app/appg" "videoweb/pub/common/ipaddr" "github.com/gin-gonic/gin" ) // ClientIPFromCtx 从 gin 请求上下文解析客户端 IP。 func ClientIPFromCtx(ctx context.Context) string { c, ok := ctx.(*gin.Context) if !ok || c == nil { return "" } return ipaddr.ResolveClientIP(c) } // IsOverseasIP 与 m3u8 TS 域名判断一致:按 v4/v6 库识别是否海外。 func IsOverseasIP(ip string) bool { ip = strings.TrimSpace(ip) if ip == "" { return false } detector := appg.DetectorV6 if ipaddr.IsIPv4(ip) { detector = appg.DetectorV4 } if detector == nil { return false } ok, _ := detector.IsOverseasIP(ip) return ok } // GetAppImageCdn 海外 IP 且配置了 imgAppUsCdn 时用海外图床,否则用 imgAppCdn。 func GetAppImageCdn(ip string) string { cfg := GetConfigInfo() if IsOverseasIP(ip) { if us := strings.TrimSpace(cfg.ImgAppUsCdn); us != "" { return us } } return strings.TrimSpace(cfg.ImgCdn) }