From e1e7e53590ad2e709272c6ec25f5a751d7666c7b Mon Sep 17 00:00:00 2001 From: junleea <354425203@qq.com> Date: Sat, 2 Aug 2025 15:39:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AF=86=E9=92=A5=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.go | 31 +++++++++++++++++++++++++++++++ proto/conf.go | 14 +++----------- service/toolService.go | 22 +++++++++++++--------- 3 files changed, 47 insertions(+), 20 deletions(-) diff --git a/main.go b/main.go index 14d7539..b16a813 100644 --- a/main.go +++ b/main.go @@ -20,6 +20,12 @@ import ( ) func main() { + // 输入参数 + if len(os.Args) > 1 { + initConfig(os.Args[1]) //第一个参数是配置文件路径 + } else { + initConfig("") //没有输入参数,则使用默认配置文件路径 + } gin.SetMode(gin.ReleaseMode) r := gin.Default() err := dao.Init() @@ -68,6 +74,31 @@ func init() { panic("failed to read config file:" + err.Error()) } } +func initConfig(configPath string) { + if proto.Config.TOKEN_SECRET != "" { + return + } + // 创建cid的目录 + os.MkdirAll(proto.CID_BASE_DIR, os.ModePerm) + os.MkdirAll(proto.CID_BASE_DIR+"script", os.ModePerm) + os.MkdirAll(proto.CID_BASE_DIR+"workspace", os.ModePerm) + //系统是linux、macos还是windows + if configPath == "" { + if os.Getenv("OS") == "Windows_NT" { + configPath = "C:/Users/Administrator/vp.conf" + } else if os.Getenv("OS") == "linux" { + //文件地址/home/saw-ai/saw-ai.conf + configPath = "/etc/vp.conf" + } else { + configPath = "/etc/vp.conf" + } + } + //读取配置文件 + err := proto.ReadConfig(configPath) + if err != nil { + panic("failed to read config file:" + err.Error()) + } +} func writeLogger(c *gin.Context) { ip := c.ClientIP() diff --git a/proto/conf.go b/proto/conf.go index 3e728d0..345b522 100644 --- a/proto/conf.go +++ b/proto/conf.go @@ -21,6 +21,7 @@ var ConfigRWLock = &sync.RWMutex{} var SigningKeyRWLock = &sync.RWMutex{} var SyncSecretReqLog int64 +var CurrentConfigPath string const ( MYSQL_USER = "video_t2" @@ -97,22 +98,12 @@ type ConfigStruct struct { } func WriteConfigToFile() { - //系统是linux、macos还是windows - var configPath string - if os.Getenv("OS") == "Windows_NT" { - configPath = "D:/Code/videoplayer/vp.conf" - } else if os.Getenv("OS") == "linux" { - //文件地址/home/saw-ai/saw-ai.conf - configPath = "/home/videoplayer/vp.conf" - } else { - configPath = "/home/videoplayer/vp.conf" - } configData, err := json.MarshalIndent(Config, "", " ") if err != nil { log.Println("WriteConfigToFile json marshal error:", err) return } - err = os.WriteFile(configPath, configData, 0644) + err = os.WriteFile(CurrentConfigPath, configData, 0644) if err != nil { log.Println("WriteConfigToFile write file error:", err) return @@ -123,6 +114,7 @@ func WriteConfigToFile() { // 读取配置文件 func ReadConfig(path string) error { //查看配置文件是否存在,不存在则创建 + CurrentConfigPath = path _, err := os.Stat(path) if err != nil { fmt.Println("Config file not found!") diff --git a/service/toolService.go b/service/toolService.go index 3ef0332..7a8122f 100644 --- a/service/toolService.go +++ b/service/toolService.go @@ -191,6 +191,10 @@ func DelMonitorDeviceListWithStatus(userId int, deviceReq []proto.GetMonitorDevi // 更新token密钥 func SyncTokenSecretFromUserCenter() { secretSettings, err := GetTokenSecretFromUserCenter() + if err != nil { + log.Println("SyncTokenSecretFromUserCenter error:", err) + return + } //写入redis secretSettingsBytes, err2 := json.Marshal(secretSettings) if err2 != nil { @@ -202,12 +206,8 @@ func SyncTokenSecretFromUserCenter() { } worker.SetRedis("secret_sync_settings", string(secretSettingsBytes)) //将密钥信息存入redis - if err != nil { - log.Println("SyncTokenSecretFromUserCenter error:", err) - return - } - if secretSettings.Curr != "" && secretSettings.Curr != proto.TOKEN_SECRET && secretSettings.Next == "" { //如果当前密钥不为空且不等于配置文件中的密钥,并且下一个密钥为空,则需要更新配置文件中的密钥 - log.Printf("SyncTokenSecretFromUserCenter current secret is not equal to config secret, current: %s, config: %s\n", secretSettings.Curr, proto.TOKEN_SECRET) + if secretSettings.Curr != "" && secretSettings.Curr != proto.Config.TOKEN_SECRET && secretSettings.Next == "" { //如果当前密钥不为空且不等于配置文件中的密钥,并且下一个密钥为空,则需要更新配置文件中的密钥 + log.Printf("SyncTokenSecretFromUserCenter current secret is not equal to config secret, current: %s, config: %s\n", secretSettings.Curr, proto.Config.TOKEN_SECRET) //如果当前密钥与配置文件中的密钥不一致,则需要更新配置文件中的密钥 proto.SigningKeyRWLock.Lock() proto.SigningKey = []byte(secretSettings.Curr) @@ -227,7 +227,6 @@ func SyncTokenSecretFromUserCenter() { proto.SyncSecretReqLog++ //记录同步密钥请求次数 } - func SetNextSecretToCurrent(secret_copy proto.SecretSyncSettings) { var secret_sync_settings proto.SecretSyncSettings redisKey := "secret_sync_settings" @@ -300,13 +299,18 @@ func GetTokenSecretFromUserCenter() (*proto.SecretSyncSettings, error) { log.Println("GetTokenSecretFromUserCenter json unmarshal error:", err) return nil, err } + if respObject.Code != 0 { + log.Println("GetTokenSecretFromUserCenter error code:", respObject.Code, "\t, message:", respObject.Message) + return nil, fmt.Errorf("GetTokenSecretFromUserCenter error code: %d, message: %s", respObject.Code, respObject.Message) + } + //对称加密密钥。通过密钥加 secret_key 取md5 - secretKeyMd5 := worker.GenerateMD5(proto.TOKEN_SECRET + "_sync_secret") + secretKeyMd5 := worker.GenerateMD5(proto.Config.TOKEN_SECRET + "_sync_secret") //解密返回数据 dataContent, err2 := worker.AESDecrypt(respObject.Data, []byte(secretKeyMd5)) if err2 != nil { - log.Println("GetTokenSecretFromUserCenter aes decrypt error:", err2) + log.Println("GetTokenSecretFromUserCenter aes decrypt error:", err2, "\t, secret:", proto.Config.TOKEN_SECRET, "\t, secretKey:", secretKeyMd5, "\t, data:", respObject.Data) return nil, err2 } var secretResp proto.SecretSyncSettings