2025-01-11 22:34:36 +08:00
|
|
|
|
package proto
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"encoding/json"
|
|
|
|
|
|
"fmt"
|
2025-01-16 23:40:08 +08:00
|
|
|
|
"io"
|
2025-01-15 23:31:50 +08:00
|
|
|
|
"log"
|
2025-01-11 22:34:36 +08:00
|
|
|
|
"os"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
var Config ConfigStruct
|
2025-01-14 15:00:40 +08:00
|
|
|
|
var Url_map = map[string]bool{} // 不需要token验证的url
|
|
|
|
|
|
var SigningKey = []byte{}
|
2025-01-11 22:34:36 +08:00
|
|
|
|
|
|
|
|
|
|
type ConfigStruct struct {
|
2025-01-14 15:00:40 +08:00
|
|
|
|
DB int `json:"db"` // 0: mysql, 1: pg
|
|
|
|
|
|
MYSQL_DSN string `json:"mysql_dsn"`
|
|
|
|
|
|
PG_DSN string `json:"pg_dsn"`
|
|
|
|
|
|
TOKEN_SECRET string `json:"token_secret"`
|
2025-01-11 22:34:36 +08:00
|
|
|
|
REDIS_ADDR string `json:"redis_addr"`
|
|
|
|
|
|
TOKEN_USE_REDIS bool `json:"token_use_redis"`
|
|
|
|
|
|
REDIS_User_PW bool `json:"redis_user_pw"` // 是否使用密码
|
|
|
|
|
|
REDIS_PASSWORD string `json:"redis_password"`
|
|
|
|
|
|
REDIS_DB int `json:"redis_db"`
|
|
|
|
|
|
SERVER_PORT string `json:"SERVER_PORT" form:"SERVER_PORT"` // 服务器端口
|
|
|
|
|
|
DeviceInfo []DeviceInfo `json:"device_info" form:"device_info"` // 设备信息
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
type DeviceInfo struct {
|
|
|
|
|
|
ID int `json:"id" form:"id"`
|
|
|
|
|
|
Name string `json:"name" form:"name"`
|
|
|
|
|
|
IP string `json:"ip" form:"ip"`
|
|
|
|
|
|
Type string `json:"type" form:"type"`
|
|
|
|
|
|
Stream string `json:"stream" form:"stream"`
|
|
|
|
|
|
Control string `json:"control" form:"control"`
|
|
|
|
|
|
NextStop bool `json:"next_stop" form:"next_stop"` // 下一帧,是否停止
|
|
|
|
|
|
CheckFrameWidth int `json:"check_frame_width" form:"check_frame_width"` // 检测帧宽度
|
|
|
|
|
|
CheckFrameHeight int `json:"check_frame_height" form:"check_frame_height"` // 检测帧高度
|
|
|
|
|
|
LogFrame int `json:"log_frame" form:"log_frame"` // 日志帧间隔,默认值为0,即不输出日志
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 读取配置文件
|
|
|
|
|
|
func ReadConfig(path string) error {
|
2025-01-16 23:40:08 +08:00
|
|
|
|
// 查看配置文件是否存在,不存在则创建
|
|
|
|
|
|
file, err := os.OpenFile(path, os.O_CREATE|os.O_RDWR, 0644)
|
2025-01-11 22:34:36 +08:00
|
|
|
|
if err != nil {
|
2025-01-16 23:40:08 +08:00
|
|
|
|
log.Printf("Error opening or creating config file: %v", err)
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
defer func() {
|
|
|
|
|
|
if err := file.Close(); err != nil {
|
|
|
|
|
|
log.Printf("Error closing config file: %v\n", err)
|
2025-01-11 22:34:36 +08:00
|
|
|
|
}
|
2025-01-16 23:40:08 +08:00
|
|
|
|
}()
|
|
|
|
|
|
|
|
|
|
|
|
// 尝试读取文件内容
|
|
|
|
|
|
decoder := json.NewDecoder(file)
|
|
|
|
|
|
if err := decoder.Decode(&Config); err != nil && err != io.EOF {
|
|
|
|
|
|
log.Printf("Error decoding config: %v \n", err)
|
|
|
|
|
|
// 如果文件为空或解码错误,写入默认配置
|
|
|
|
|
|
Config.SERVER_PORT = "5002"
|
2025-01-11 22:34:36 +08:00
|
|
|
|
encoder := json.NewEncoder(file)
|
2025-01-16 23:40:08 +08:00
|
|
|
|
if err := encoder.Encode(&Config); err != nil {
|
|
|
|
|
|
log.Printf("Error encoding config: %v", err)
|
|
|
|
|
|
return err
|
2025-01-11 22:34:36 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-01-16 23:40:08 +08:00
|
|
|
|
// 将配置写入 redis
|
|
|
|
|
|
jsonData, err := json.Marshal(Config)
|
2025-01-11 22:34:36 +08:00
|
|
|
|
if err != nil {
|
2025-01-16 23:40:08 +08:00
|
|
|
|
log.Printf("ReadConfigToSetSystem Error encoding config,err :%v\n", err)
|
2025-01-11 22:34:36 +08:00
|
|
|
|
return err
|
|
|
|
|
|
}
|
2025-01-14 15:00:40 +08:00
|
|
|
|
SigningKey = []byte(Config.TOKEN_SECRET)
|
2025-01-14 15:44:04 +08:00
|
|
|
|
if Config.TOKEN_SECRET == "" {
|
2025-01-16 23:40:08 +08:00
|
|
|
|
return fmt.Errorf("token secret is empty: %s", string(jsonData))
|
2025-01-14 15:44:04 +08:00
|
|
|
|
}
|
2025-01-16 23:40:08 +08:00
|
|
|
|
return nil
|
2025-01-11 22:34:36 +08:00
|
|
|
|
}
|