Compare commits

..

No commits in common. "301817c35381153de2dd7501f2defae9dc453bf3" and "a9a9ecc3bde4d20e89e9b80aa56e8dc69c4e1099" have entirely different histories.

3 changed files with 25 additions and 71 deletions

42
main.go
View File

@ -20,12 +20,6 @@ import (
)
func main() {
// 输入参数
if len(os.Args) > 1 {
initConfig(os.Args[1]) //第一个参数是配置文件路径
} else {
initConfig("") //没有输入参数,则使用默认配置文件路径
}
gin.SetMode(gin.ReleaseMode)
r := gin.Default()
err := dao.Init()
@ -60,42 +54,14 @@ func main() {
ReadConfigToSetSystem()
r.Run(":" + proto.Config.SERVER_PORT) // listen and serve on 0.0.0.0:8083
}
// 不使用
//
// func init() {
// // 创建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)
// //读取配置文件
// //文件地址/home/videoplayer/vp.conf
// configPath := "/home/videoplayer/vp.conf"
// //读取配置文件
// err := proto.ReadConfig(configPath)
// if err != nil {
// panic("failed to read config file:" + err.Error())
// }
// }
func initConfig(configPath string) {
//if proto.Config.TOKEN_SECRET != "" {
// return
//}
func init() {
// 创建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"
}
}
//读取配置文件
//文件地址/home/videoplayer/vp.conf
configPath := "/home/videoplayer/vp.conf"
//读取配置文件
err := proto.ReadConfig(configPath)
if err != nil {

View File

@ -5,7 +5,6 @@ import (
"fmt"
"gorm.io/gorm"
"log"
mrand "math/rand"
"os"
"sync"
)
@ -21,7 +20,6 @@ var ConfigRWLock = &sync.RWMutex{}
var SigningKeyRWLock = &sync.RWMutex{}
var SyncSecretReqLog int64
var CurrentConfigPath string
const (
MYSQL_USER = "video_t2"
@ -94,16 +92,25 @@ type ConfigStruct struct {
USER_SYNC_TIME int `json:"user_sync_time"` // 用户数据同步时间,单位秒
SERVER_NAME string `json:"server_name"` // 服务器名称,用于区分不同服务器
MONITOR_SERVER_TOKEN string `json:"monitor_server_token"` // 监控服务器token,用于状态监控及邮件通知
APP_ID string `json:"app_id"` // 应用ID,用于标识不同应用
}
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(CurrentConfigPath, configData, 0644)
err = os.WriteFile(configPath, configData, 0644)
if err != nil {
log.Println("WriteConfigToFile write file error:", err)
return
@ -114,7 +121,6 @@ func WriteConfigToFile() {
// 读取配置文件
func ReadConfig(path string) error {
//查看配置文件是否存在,不存在则创建
CurrentConfigPath = path
_, err := os.Stat(path)
if err != nil {
fmt.Println("Config file not found!")
@ -152,22 +158,8 @@ func ReadConfig(path string) error {
}
}
SigningKey = []byte(Config.TOKEN_SECRET)
if Config.APP_ID == "" {
Config.APP_ID = GetRandomString(8)
log.Println("ReadConfig generated APP_ID:", Config.APP_ID)
go WriteConfigToFile()
}
return err
}
func GetRandomString(l int) string {
str := "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
bytes := []byte(str)
var result []byte
for i := 0; i < l; i++ {
result = append(result, bytes[mrand.Intn(len(bytes))])
}
return string(result)
}
// 默认配置
func DefaultConfig() {

View File

@ -191,10 +191,6 @@ 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 {
@ -206,8 +202,12 @@ func SyncTokenSecretFromUserCenter() {
}
worker.SetRedis("secret_sync_settings", string(secretSettingsBytes)) //将密钥信息存入redis
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)
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)
//如果当前密钥与配置文件中的密钥不一致,则需要更新配置文件中的密钥
proto.SigningKeyRWLock.Lock()
proto.SigningKey = []byte(secretSettings.Curr)
@ -227,6 +227,7 @@ func SyncTokenSecretFromUserCenter() {
proto.SyncSecretReqLog++ //记录同步密钥请求次数
}
func SetNextSecretToCurrent(secret_copy proto.SecretSyncSettings) {
var secret_sync_settings proto.SecretSyncSettings
redisKey := "secret_sync_settings"
@ -279,7 +280,7 @@ func GetTokenSecretFromUserCenter() (*proto.SecretSyncSettings, error) {
proto.SigningKeyRWLock.Lock()
defer proto.SigningKeyRWLock.Unlock()
req.SecretKeyMd5 = worker.GenerateMD5(string(proto.SigningKey))
req.DeviceApp = proto.Config.APP_ID
req.DeviceApp = "StuAcaWorksAI"
req.Timestamp = worker.GetCurrentTimestamp()
req.Sign = worker.GenerateMD5(req.SecretKeyMd5 + req.DeviceApp + strconv.FormatInt(req.Timestamp, 10))
reqBytes, err2 := json.Marshal(req)
@ -299,18 +300,13 @@ 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.Config.TOKEN_SECRET + "_sync_secret")
secretKeyMd5 := worker.GenerateMD5(proto.TOKEN_SECRET + "_sync_secret")
//解密返回数据
dataContent, err2 := worker.AESDecrypt(respObject.Data, []byte(secretKeyMd5))
if err2 != nil {
log.Println("GetTokenSecretFromUserCenter aes decrypt error:", err2, "\t, secret:", proto.Config.TOKEN_SECRET, "\t, secretKey:", secretKeyMd5, "\t, data:", respObject.Data)
log.Println("GetTokenSecretFromUserCenter aes decrypt error:", err2)
return nil, err2
}
var secretResp proto.SecretSyncSettings