package proto import ( "encoding/json" "fmt" "io" "log" "os" ) var Config ConfigStruct var Url_map = map[string]bool{} // 不需要token验证的url var SigningKey = []byte{} type ConfigStruct struct { 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"` 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 { // 查看配置文件是否存在,不存在则创建 file, err := os.OpenFile(path, os.O_CREATE|os.O_RDWR, 0644) if err != nil { 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) } }() // 尝试读取文件内容 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" encoder := json.NewEncoder(file) if err := encoder.Encode(&Config); err != nil { log.Printf("Error encoding config: %v", err) return err } } // 将配置写入 redis jsonData, err := json.Marshal(Config) if err != nil { log.Printf("ReadConfigToSetSystem Error encoding config,err :%v\n", err) return err } SigningKey = []byte(Config.TOKEN_SECRET) if Config.TOKEN_SECRET == "" { return fmt.Errorf("token secret is empty: %s", string(jsonData)) } return nil }