// 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 }