Initial commit: web_hghl_server
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
package cfg
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
)
|
||||
|
||||
var appKeyCache struct {
|
||||
sync.RWMutex
|
||||
value string
|
||||
ready bool
|
||||
}
|
||||
|
||||
// CacheAppKey 把系统配置里的 appKey 放进内存,供媒资写接口读取。
|
||||
func CacheAppKey(appKey string) {
|
||||
appKeyCache.Lock()
|
||||
appKeyCache.value = strings.TrimSpace(appKey)
|
||||
appKeyCache.ready = true
|
||||
appKeyCache.Unlock()
|
||||
}
|
||||
|
||||
// CachedAppKey 返回已缓存的 appKey。缓存未建立时读取 sys_cfg 并写入缓存。
|
||||
func CachedAppKey(ctx context.Context) string {
|
||||
appKeyCache.RLock()
|
||||
if appKeyCache.ready {
|
||||
value := appKeyCache.value
|
||||
appKeyCache.RUnlock()
|
||||
return value
|
||||
}
|
||||
appKeyCache.RUnlock()
|
||||
|
||||
sysCfg, serr := FindOneSysCfg(ctx, bson.M{FN.SysCfg.Id: 1})
|
||||
if serr != nil || sysCfg == nil {
|
||||
return ""
|
||||
}
|
||||
value := strings.TrimSpace(sysCfg.AppKey)
|
||||
CacheAppKey(value)
|
||||
return value
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package cfg
|
||||
|
||||
import (
|
||||
"videoweb/pub/mongos"
|
||||
)
|
||||
|
||||
var (
|
||||
sysCfgColl *mongos.Collection
|
||||
)
|
||||
@@ -0,0 +1,55 @@
|
||||
package cfg
|
||||
|
||||
import (
|
||||
"context"
|
||||
"videoweb/pub/common/log"
|
||||
"videoweb/pub/common/srvdef"
|
||||
"videoweb/pub/mongos"
|
||||
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/mongo"
|
||||
)
|
||||
|
||||
// Init 初始化数据
|
||||
func Init(ctx context.Context) {
|
||||
sysCfgColl = mongos.Shop.Coll(TN.SysCfg)
|
||||
}
|
||||
|
||||
// FindOneSysCfg 查找一个系统配置
|
||||
func FindOneSysCfg(ctx context.Context, filter bson.M) (
|
||||
*SysCfg, *srvdef.SrvErr) {
|
||||
var sysCfg SysCfg
|
||||
if err := sysCfgColl.FindOneEx(
|
||||
ctx, &sysCfg, filter); err != nil {
|
||||
if err != mongo.ErrNoDocuments {
|
||||
log.Info("cfg:FindOneSysCfg db.FindOneEx failed",
|
||||
log.E(err), log.Any("filter", filter))
|
||||
return nil, srvdef.New(srvdef.ErrDbQueryError, "", "")
|
||||
}
|
||||
return nil, srvdef.New(srvdef.ErrDbQueryError, "", "")
|
||||
}
|
||||
return &sysCfg, nil
|
||||
}
|
||||
|
||||
// UpdateOneSysCfg 更新一个系统配置
|
||||
func UpdateOneSysCfg(ctx context.Context, filter bson.M, update bson.M) *srvdef.SrvErr {
|
||||
result, err := sysCfgColl.UpdateOne(ctx, filter, update)
|
||||
if err != nil {
|
||||
log.Warn("cfg:UpdateOneSysCfg db.UpdateOne failed",
|
||||
log.E(err), log.Any("filter", filter))
|
||||
return srvdef.New(srvdef.ErrDbUpdateError, "", "")
|
||||
}
|
||||
if result.MatchedCount != 1 {
|
||||
return srvdef.New(srvdef.ErrDbUpdateError, "", "")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func DeleteOneSysCfg(ctx context.Context, filter bson.M) *srvdef.SrvErr {
|
||||
_, err := sysCfgColl.DeleteOne(ctx, filter)
|
||||
if err != nil {
|
||||
log.Warn("cfg:DeleteOneSysCfg db.DeleteOne failed", log.Any("filter", filter), log.E(err))
|
||||
return srvdef.New(srvdef.ErrDbQueryError, "", "")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Executable
+88
@@ -0,0 +1,88 @@
|
||||
package cfg
|
||||
|
||||
type TagSysCfg struct {
|
||||
AppAddr string
|
||||
DownloadVideoUrl string
|
||||
ForeverUrlAddr string
|
||||
GitAddr string
|
||||
GmailAddr string
|
||||
Id string
|
||||
ImgAppCdn string
|
||||
ImgWebCdn string
|
||||
MediaAppCdn string
|
||||
MediaWebCdn string
|
||||
NewUrlAddr string
|
||||
NewUrlAddr1 string
|
||||
NewUrlAddr2 string
|
||||
QQ string
|
||||
Telegram string
|
||||
TelegramAdd string
|
||||
TgGroup string
|
||||
TranslationAddr string
|
||||
TwitterAddr string
|
||||
WatermarkImage string
|
||||
WatermarkMedia string
|
||||
WatermarkMediaTop string
|
||||
WatermarkMediaTopRight string
|
||||
WatermarkMediaBottomLeft string
|
||||
WeiChart string
|
||||
DHNewUrlAddr1 string
|
||||
DHNewUrlAddr2 string
|
||||
DHNewUrlAddr3 string
|
||||
DHForeverUrlAddr string
|
||||
UnencryptedCdn string
|
||||
SitemapDefaultImages string
|
||||
Version string
|
||||
ChannelCode string
|
||||
EnableH265 string
|
||||
M3U8DayRateLimitMax string
|
||||
AppKey string
|
||||
}
|
||||
|
||||
var FN struct {
|
||||
SysCfg TagSysCfg
|
||||
}
|
||||
|
||||
var TN struct {
|
||||
SysCfg string
|
||||
}
|
||||
|
||||
func init() {
|
||||
FN.SysCfg.AppAddr = "appAddr"
|
||||
FN.SysCfg.DownloadVideoUrl = "downloadVideoUrl"
|
||||
FN.SysCfg.ForeverUrlAddr = "foreverUrlAddr"
|
||||
FN.SysCfg.GitAddr = "gitAddr"
|
||||
FN.SysCfg.GmailAddr = "gmailAddr"
|
||||
FN.SysCfg.Id = "_id"
|
||||
FN.SysCfg.ImgAppCdn = "imgAppCdn"
|
||||
FN.SysCfg.ImgWebCdn = "imgWebCdn"
|
||||
FN.SysCfg.MediaAppCdn = "mediaAppCdn"
|
||||
FN.SysCfg.MediaWebCdn = "mediaWebCdn"
|
||||
FN.SysCfg.NewUrlAddr = "newUrlAddr"
|
||||
FN.SysCfg.NewUrlAddr1 = "newUrlAddr1"
|
||||
FN.SysCfg.NewUrlAddr2 = "newUrlAddr2"
|
||||
FN.SysCfg.QQ = "qq"
|
||||
FN.SysCfg.Telegram = "telegram"
|
||||
FN.SysCfg.TelegramAdd = "telegramAdd"
|
||||
FN.SysCfg.TgGroup = "tgGroup"
|
||||
FN.SysCfg.TranslationAddr = "translationAddr"
|
||||
FN.SysCfg.TwitterAddr = "twitterAddr"
|
||||
FN.SysCfg.WatermarkImage = "watermarkImage"
|
||||
FN.SysCfg.WatermarkMedia = "watermarkMedia"
|
||||
FN.SysCfg.WatermarkMediaTop = "watermarkMediaTop"
|
||||
FN.SysCfg.WatermarkMediaTopRight = "watermarkMediaTopRight"
|
||||
FN.SysCfg.WatermarkMediaBottomLeft = "watermarkMediaBottomLeft"
|
||||
FN.SysCfg.WeiChart = "weiChart"
|
||||
FN.SysCfg.DHNewUrlAddr1 = "dHNewUrlAddr1"
|
||||
FN.SysCfg.DHNewUrlAddr2 = "dHNewUrlAddr2"
|
||||
FN.SysCfg.DHNewUrlAddr3 = "dHNewUrlAddr3"
|
||||
FN.SysCfg.DHForeverUrlAddr = "dHForeverUrlAddr"
|
||||
FN.SysCfg.UnencryptedCdn = "unencryptedCdn"
|
||||
FN.SysCfg.SitemapDefaultImages = "sitemapDefaultImages"
|
||||
FN.SysCfg.Version = "version"
|
||||
FN.SysCfg.ChannelCode = "channelCode"
|
||||
FN.SysCfg.EnableH265 = "enableH265"
|
||||
FN.SysCfg.M3U8DayRateLimitMax = "m3u8DayRateLimitMax"
|
||||
FN.SysCfg.AppKey = "appKey"
|
||||
TN.SysCfg = "sys_cfg"
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
package cfg
|
||||
|
||||
import "strings"
|
||||
|
||||
// @table:sys_cfg
|
||||
type SysCfg struct {
|
||||
Id int64 `json:"id" bson:"_id"`
|
||||
Version int64 `json:"version" bson:"version"` // 版本号,用于更新乐观锁
|
||||
UnencryptedCdn string `json:"unencryptedCdn" bson:"unencryptedCdn"` // 不加密资源使用的cdn
|
||||
SitemapDefaultImages []string `json:"sitemapDefaultImages" bson:"sitemapDefaultImages"` // Sitemap里面默认封面图
|
||||
ImgAppCdn string `json:"imgAppCdn" bson:"imgAppCdn"` // 图片CDN(app使用)
|
||||
ImgAppUsCdn string `json:"imgAppUsCdn" bson:"imgAppUsCdn"` // 图片CDN(海外app使用)
|
||||
ImgWebCdn string `json:"imgWebCdn" bson:"imgWebCdn"` // 图片CDN(web使用)
|
||||
MediaWebCdn string `json:"mediaWebCdn" bson:"mediaWebCdn"` // 视频CDN(web使用)
|
||||
MediaAppCdn string `json:"mediaAppCdn" bson:"mediaAppCdn"` // 视频CDN(app使用)
|
||||
MediaAppUsCdn string `json:"mediaAppUsCdn" bson:"mediaAppUsCdn"` // 视频CDN(海外app使用)
|
||||
WatermarkImage string `json:"watermarkImage" bson:"watermarkImage"` // 图片水印文件
|
||||
WatermarkMedia string `json:"watermarkMedia" bson:"watermarkMedia"` // 视频水印文件(底部右边)
|
||||
WatermarkMediaTop string `json:"watermarkMediaTop" bson:"watermarkMediaTop"` // 视频水印文件(顶部左边)
|
||||
WatermarkMediaTopRight string `json:"watermarkMediaTopRight" bson:"watermarkMediaTopRight"` // 视频水印文件(顶部右边)
|
||||
WatermarkMediaBottomLeft string `json:"watermarkMediaBottomLeft" bson:"watermarkMediaBottomLeft"` // 视频水印文件(底部左边)
|
||||
Mp4Addr string `json:"mp4Addr" bson:"mp4Addr"` // mp4地址(web使用)
|
||||
PdfAddr string `json:"pdfAddr" bson:"pdfAddr"` // 回家的路PDF
|
||||
//网站管理
|
||||
NewUrlAddr string `json:"newUrlAddr" bson:"newUrlAddr"` //最新地址
|
||||
NewUrlAddr1 string `json:"newUrlAddr1" bson:"newUrlAddr1"` //最新地址(备用地址1)
|
||||
NewUrlAddr2 string `json:"newUrlAddr2" bson:"newUrlAddr2"` //最新地址(备用地址2)
|
||||
ForeverUrlAddr string `json:"foreverUrlAddr" bson:"foreverUrlAddr"` //永久地址
|
||||
GmailAddr string `json:"gmailAddr" bson:"gmailAddr"` //邮箱地址
|
||||
AppAddr string `json:"appAddr" bson:"appAddr"` //APP下载地址(落地页)
|
||||
DownloadVideoUrl string `json:"downloadVideoUrl" bson:"downloadVideoUrl"` // 下载视频URL
|
||||
WeiChart string `json:"weiChart" bson:"weiChart"` //微信群
|
||||
QQ string `json:"qq" bson:"qq"` //qq群
|
||||
TgGroup string `json:"tgGroup" bson:"tgGroup"` //tg群
|
||||
PotaoGroup string `json:"potaoGroup" bson:"potaoGroup"` //土豆群
|
||||
GitAddr string `json:"gitAddr" bson:"gitAddr"` //git地址
|
||||
TwitterAddr string `json:"twitterAddr" bson:"twitterAddr"` //推特地址
|
||||
Telegram string `json:"telegram" bson:"telegram"` //商务tg
|
||||
TelegramAdd string `json:"telegramAdd" bson:"telegramAdd"` //加入我们tg
|
||||
TranslationAddr string `json:"translationAddr" bson:"translationAddr"` //应用导航
|
||||
//SEO
|
||||
WebTitle string `json:"webTitle" bson:"webTitle"` // 网站SEO标题
|
||||
WebKeyworld []string `json:"webKeyworld" bson:"webKeyworld"` // 网站SEO关键字
|
||||
WebDescription string `json:"webDescription" bson:"webDescription"` // 网站SEO描述
|
||||
WebSiteName string `json:"webSiteName" bson:"webSiteName"` // 网站SEO网站名称
|
||||
WebAddr string `json:"webAddr" bson:"webAddr"` // 网站SEO网站地址
|
||||
DHNewUrlAddr1 string `json:"dhNewUrlAddr1" bson:"dhNewUrlAddr1"` // 导航页-线路1
|
||||
DHNewUrlAddr2 string `json:"dhNewUrlAddr2" bson:"dhNewUrlAddr2"` // 导航页-线路2
|
||||
DHNewUrlAddr3 string `json:"dhNewUrlAddr3" bson:"dhNewUrlAddr3"` // 导航页-线路3
|
||||
FreeVPN string `json:"freeVPN" bson:"freeVPN"` // 免费vpn链接
|
||||
UseAddress []string `json:"useAddress" bson:"useAddress"` // 所有使用中的域名
|
||||
DHTitle string `json:"dhTitle" bson:"dhTitle"` // 导航SEO标题
|
||||
DHKeyworld []string `json:"dhKeyworld" bson:"dhKeyworld"` // 导航SEO关键字
|
||||
DHDescription string `json:"dhDescription" bson:"dhDescription"` // 导航SEO描述
|
||||
DHSiteName string `json:"dhSiteName" bson:"dhSiteName"` // 导航SEO网站名称
|
||||
ChannelCode string `json:"channelCode" bson:"channelCode"` // 渠道码
|
||||
EnableH265 bool `json:"enableH265" bson:"enableH265"` // 是否允许客户端使用 H265 地址播放
|
||||
M3U8DayRateLimitMax int64 `json:"m3u8DayRateLimitMax" bson:"m3u8DayRateLimitMax"` // 每 IP 每天最多不同正片数,<=0 使用默认 80
|
||||
AppKey string `json:"appKey" bson:"appKey"` // 媒资库 appKey,调用 media 写接口时传入
|
||||
}
|
||||
|
||||
// SEOBaseURL 返回与页面 canonical 一致的 SEO 主域。
|
||||
// 永久域名未配置时回退到 WebAddr,避免生成空地址。
|
||||
func (c *SysCfg) SEOBaseURL() string {
|
||||
if c == nil {
|
||||
return ""
|
||||
}
|
||||
base := strings.TrimSpace(c.ForeverUrlAddr)
|
||||
if base == "" {
|
||||
base = strings.TrimSpace(c.WebAddr)
|
||||
}
|
||||
return strings.TrimRight(base, "/")
|
||||
}
|
||||
Reference in New Issue
Block a user