修复密钥同步问题
This commit is contained in:
parent
68e0ee27f2
commit
e1e7e53590
31
main.go
31
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()
|
||||
|
|
|
|||
|
|
@ -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!")
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue