This commit is contained in:
unknown
2026-02-04 20:27:13 +08:00
commit 3b042d1dad
9410 changed files with 1488147 additions and 0 deletions

View File

@@ -0,0 +1,5 @@
package configloaders
import "sync"
var locker sync.Mutex

View File

@@ -0,0 +1,118 @@
// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
package configloaders
import (
"encoding/json"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/TeaOSLab/EdgeCommon/pkg/systemconfigs"
"github.com/TeaOSLab/EdgeCommon/pkg/userconfigs"
"github.com/TeaOSLab/EdgeUser/internal/events"
"github.com/TeaOSLab/EdgeUser/internal/remotelogs"
"github.com/TeaOSLab/EdgeUser/internal/rpc"
"github.com/iwind/TeaGo/Tea"
"time"
)
var sharedRegisterConfig *userconfigs.UserRegisterConfig
func init() {
var ticker = time.NewTicker(1 * time.Minute)
if Tea.IsTesting() {
ticker = time.NewTicker(10 * time.Second)
}
events.On(events.EventStart, func() {
go func() {
for range ticker.C {
err := reloadRegisterConfig()
if err != nil {
if rpc.IsConnError(err) {
remotelogs.Debug("CONFIG_LOADER", "reload register config failed: "+err.Error())
} else {
remotelogs.Error("CONFIG_LOADER", "reload register config failed: "+err.Error())
}
}
}
}()
})
}
// LoadRegisterConfig 加载注册配置
func LoadRegisterConfig() (*userconfigs.UserRegisterConfig, error) {
locker.Lock()
if sharedRegisterConfig != nil {
locker.Unlock()
return sharedRegisterConfig, nil
}
locker.Unlock()
rpcClient, err := rpc.SharedRPC()
if err != nil {
return nil, err
}
resp, err := rpcClient.SysSettingRPC().ReadSysSetting(rpcClient.Context(0), &pb.ReadSysSettingRequest{Code: systemconfigs.SettingCodeUserRegisterConfig})
if err != nil {
return nil, err
}
var config = userconfigs.DefaultUserRegisterConfig()
if len(resp.ValueJSON) > 0 {
err = json.Unmarshal(resp.ValueJSON, config)
if err != nil {
return nil, err
}
locker.Lock()
sharedRegisterConfig = config
locker.Unlock()
}
return config, nil
}
func RequireVerification() bool {
locker.Lock()
defer locker.Unlock()
if sharedRegisterConfig == nil {
return false
}
return sharedRegisterConfig.RequireVerification
}
func RequireIdentity() bool {
locker.Lock()
defer locker.Unlock()
if sharedRegisterConfig == nil {
return false
}
return sharedRegisterConfig.RequireIdentity
}
// 刷新注册配置
func reloadRegisterConfig() error {
rpcClient, err := rpc.SharedRPC()
if err != nil {
return err
}
resp, err := rpcClient.SysSettingRPC().ReadSysSetting(rpcClient.Context(0), &pb.ReadSysSettingRequest{Code: systemconfigs.SettingCodeUserRegisterConfig})
if err != nil {
return err
}
var config = userconfigs.DefaultUserRegisterConfig()
if len(resp.ValueJSON) > 0 {
err = json.Unmarshal(resp.ValueJSON, config)
if err != nil {
return err
}
locker.Lock()
sharedRegisterConfig = config
locker.Unlock()
}
return nil
}

View File

@@ -0,0 +1,33 @@
// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
package configloaders
import (
"encoding/json"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/TeaOSLab/EdgeCommon/pkg/systemconfigs"
"github.com/TeaOSLab/EdgeCommon/pkg/userconfigs"
"github.com/TeaOSLab/EdgeUser/internal/rpc"
)
// LoadServerConfig 加载服务配置
func LoadServerConfig() (*userconfigs.UserServerConfig, error) {
rpcClient, err := rpc.SharedRPC()
if err != nil {
return nil, err
}
resp, err := rpcClient.SysSettingRPC().ReadSysSetting(rpcClient.Context(0), &pb.ReadSysSettingRequest{Code: systemconfigs.SettingCodeUserServerConfig})
if err != nil {
return nil, err
}
var config = userconfigs.DefaultUserServerConfig()
if len(resp.ValueJSON) > 0 {
err = json.Unmarshal(resp.ValueJSON, config)
if err != nil {
return nil, err
}
}
return config, nil
}

View File

@@ -0,0 +1,115 @@
package configloaders
import (
"encoding/json"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/TeaOSLab/EdgeCommon/pkg/systemconfigs"
"github.com/TeaOSLab/EdgeUser/internal/rpc"
"github.com/iwind/TeaGo/logs"
"reflect"
"time"
)
var sharedUIConfig *systemconfigs.UserUIConfig = nil
func init() {
// 更新任务
// TODO 改成实时更新
var ticker = time.NewTicker(1 * time.Minute)
go func() {
for range ticker.C {
err := reloadUIConfig()
if err != nil {
logs.Println("[CONFIG_LOADERS]load ui config failed: " + err.Error())
}
}
}()
}
func LoadUIConfig() (*systemconfigs.UserUIConfig, error) {
locker.Lock()
defer locker.Unlock()
config, err := loadUIConfig()
if err != nil {
return nil, err
}
v := reflect.Indirect(reflect.ValueOf(config)).Interface().(systemconfigs.UserUIConfig)
return &v, nil
}
func loadUIConfig() (*systemconfigs.UserUIConfig, error) {
if sharedUIConfig != nil {
return sharedUIConfig, nil
}
var rpcClient, err = rpc.SharedRPC()
if err != nil {
return nil, err
}
resp, err := rpcClient.SysSettingRPC().ReadSysSetting(rpcClient.Context(0), &pb.ReadSysSettingRequest{
Code: systemconfigs.SettingCodeUserUIConfig,
})
if err != nil {
return nil, err
}
if len(resp.ValueJSON) == 0 {
sharedUIConfig = systemconfigs.NewUserUIConfig()
return sharedUIConfig, nil
}
var config = systemconfigs.NewUserUIConfig()
err = json.Unmarshal(resp.ValueJSON, config)
if err != nil {
logs.Println("[UI_MANAGER]" + err.Error())
sharedUIConfig = systemconfigs.NewUserUIConfig()
return sharedUIConfig, nil
}
sharedUIConfig = config
// 时区
updateTimeZone(config)
return sharedUIConfig, nil
}
func reloadUIConfig() error {
var rpcClient, err = rpc.SharedRPC()
if err != nil {
return err
}
resp, err := rpcClient.SysSettingRPC().ReadSysSetting(rpcClient.Context(0), &pb.ReadSysSettingRequest{
Code: systemconfigs.SettingCodeUserUIConfig,
})
if err != nil {
return err
}
if len(resp.ValueJSON) == 0 {
return nil
}
var config = systemconfigs.NewUserUIConfig()
err = json.Unmarshal(resp.ValueJSON, config)
if err != nil {
return err
}
var oldConfig = sharedUIConfig
sharedUIConfig = config
// 时区
if oldConfig == nil || oldConfig.TimeZone != config.TimeZone {
updateTimeZone(config)
}
return nil
}
// 修改时区
func updateTimeZone(config *systemconfigs.UserUIConfig) {
if len(config.TimeZone) > 0 {
location, err := time.LoadLocation(config.TimeZone)
if err == nil && time.Local != location {
time.Local = location
}
}
}

View File

@@ -0,0 +1,29 @@
package configloaders
import (
_ "github.com/iwind/TeaGo/bootstrap"
"testing"
"time"
)
func TestLoadUIConfig(t *testing.T) {
for i := 0; i < 10; i++ {
before := time.Now()
config, err := LoadUIConfig()
if err != nil {
t.Fatal(err)
}
t.Log(time.Since(before).Seconds()*1000, "ms")
t.Logf("%p", config)
}
}
func TestLoadUIConfig2(t *testing.T) {
for i := 0; i < 10; i++ {
config, err := LoadUIConfig()
if err != nil {
t.Fatal(err)
}
t.Log(config)
}
}

View File

@@ -0,0 +1,76 @@
// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn .
package configloaders
import (
"bytes"
"encoding/json"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/TeaOSLab/EdgeCommon/pkg/systemconfigs"
"github.com/TeaOSLab/EdgeCommon/pkg/userconfigs"
"github.com/TeaOSLab/EdgeUser/internal/remotelogs"
"github.com/TeaOSLab/EdgeUser/internal/rpc"
"time"
)
var sharedUserPriceConfig *userconfigs.UserPriceConfig
var sharedUserPriceJSON []byte
func init() {
var ticker = time.NewTicker(1 * time.Minute)
go func() {
for range ticker.C {
_, err := LoadUserPriceConfig()
if err != nil {
if rpc.IsConnError(err) {
remotelogs.Debug("LoadUserPriceConfig", err.Error())
} else {
remotelogs.Error("LoadUserPriceConfig", err.Error())
}
}
}
}()
}
// LoadUserPriceConfig 加载用户计费设置
// 在没有error的情况下需要保证一定会返回一个不为空的配置
func LoadUserPriceConfig() (*userconfigs.UserPriceConfig, error) {
rpcClient, err := rpc.SharedRPC()
if err != nil {
return nil, err
}
resp, err := rpcClient.SysSettingRPC().ReadSysSetting(rpcClient.Context(0), &pb.ReadSysSettingRequest{Code: systemconfigs.SettingCodeUserPriceConfig})
if err != nil {
return nil, err
}
// 如果是相同,则不更新
if bytes.Equal(resp.ValueJSON, sharedUserPriceJSON) {
return sharedUserPriceConfig, nil
}
var config = userconfigs.DefaultUserPriceConfig()
if len(resp.ValueJSON) == 0 {
return config, nil
}
err = json.Unmarshal(resp.ValueJSON, config)
if err != nil {
return nil, err
}
sharedUserPriceConfig = config
sharedUserPriceJSON = resp.ValueJSON
return config, nil
}
func LoadCacheableUserPriceConfig() (*userconfigs.UserPriceConfig, error) {
if sharedUserPriceConfig != nil {
// clone是防止被修改
return sharedUserPriceConfig.Clone()
}
return LoadUserPriceConfig()
}