2024-06-25 09:38:21 +08:00
|
|
|
|
package proto
|
|
|
|
|
|
|
2024-09-22 13:59:33 +08:00
|
|
|
|
import (
|
|
|
|
|
|
"encoding/json"
|
|
|
|
|
|
"fmt"
|
|
|
|
|
|
"gorm.io/gorm"
|
2025-07-31 21:03:49 +08:00
|
|
|
|
"log"
|
2024-09-22 13:59:33 +08:00
|
|
|
|
"os"
|
2025-07-31 21:03:49 +08:00
|
|
|
|
"sync"
|
2024-09-22 13:59:33 +08:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
var Config ConfigStruct
|
|
|
|
|
|
var SigningKey = []byte{}
|
2025-03-18 14:00:37 +08:00
|
|
|
|
var Url_map = map[string]bool{"/login": true, "/register": true, "/uuid": true, "/gqr": true, "/cid/callback": true, "/tool/monitor": true, "/user/sync": true, "/tool/file/": true, "/user/reset": true} // 不需要token验证的url
|
2024-12-04 18:39:57 +08:00
|
|
|
|
var Per_menu_map = map[string]int{"/video/": 1, "/device/": 2, "/cid/": 3}
|
2025-01-03 15:28:36 +08:00
|
|
|
|
var File_Type = map[string]int{"im": 1, "avatar": 2, "file": 3, "config": 4} // 文件类型
|
2025-07-31 21:03:49 +08:00
|
|
|
|
|
|
|
|
|
|
// 配置读写锁
|
|
|
|
|
|
var ConfigRWLock = &sync.RWMutex{}
|
|
|
|
|
|
var SigningKeyRWLock = &sync.RWMutex{}
|
|
|
|
|
|
|
|
|
|
|
|
var SyncSecretReqLog int64
|
|
|
|
|
|
|
2024-06-25 09:38:21 +08:00
|
|
|
|
const (
|
2024-06-25 10:20:48 +08:00
|
|
|
|
MYSQL_USER = "video_t2"
|
|
|
|
|
|
MYSQL_DB = "video_t2"
|
|
|
|
|
|
MYSQL_PASSWORD = "2t2SKHmWEYj2xFKF"
|
|
|
|
|
|
MYSQL_PORT = "3306"
|
|
|
|
|
|
MYSQL_HOST = "127.0.0.1"
|
2024-06-25 10:28:22 +08:00
|
|
|
|
MYSQL_DSN = MYSQL_USER + ":" + MYSQL_PASSWORD + "@tcp(" + MYSQL_HOST + ":" + MYSQL_PORT + ")/" + MYSQL_DB + "?charset=utf8mb4&parseTime=True&loc=Local"
|
2024-06-25 09:38:21 +08:00
|
|
|
|
|
|
|
|
|
|
REDIS_ADDR = "127.0.0.1:6379"
|
2024-08-04 21:08:29 +08:00
|
|
|
|
REDIS_PASSWORD = "lj502138"
|
2024-06-25 09:38:21 +08:00
|
|
|
|
REIDS_DB = 2
|
|
|
|
|
|
|
|
|
|
|
|
TOKEN_SECRET = "mfjurnc_32ndj9dfhj"
|
2024-07-05 11:38:59 +08:00
|
|
|
|
|
|
|
|
|
|
// 以下是持续集成、部署的配置
|
|
|
|
|
|
CID_BASE_DIR = "/home/lijun/cid/"
|
2024-08-30 11:28:27 +08:00
|
|
|
|
|
|
|
|
|
|
// 以下是文件上传的配置
|
|
|
|
|
|
FILE_BASE_DIR = "/home/lijun/file/"
|
2024-06-25 09:38:21 +08:00
|
|
|
|
)
|
2024-06-28 10:10:23 +08:00
|
|
|
|
|
2024-08-02 15:02:56 +08:00
|
|
|
|
const (
|
|
|
|
|
|
// 以下是消息类型
|
2024-08-16 15:25:10 +08:00
|
|
|
|
MSG_TYPE_SIMPLE = 1 // 单聊
|
|
|
|
|
|
MSG_TYPE_GROUP = 2 // 群聊
|
|
|
|
|
|
MSG_TYPE_SYSTEM = 3 // 系统消息
|
|
|
|
|
|
MSG_TYPE_FRIEND = 4 // 好友请求
|
|
|
|
|
|
MSG_TYPE_GROUP_ADD = 5 // 加入群聊请求
|
|
|
|
|
|
MSG_TYPE_GROUP_INVI = 6 // 邀请加入群聊
|
2024-08-02 15:02:56 +08:00
|
|
|
|
|
|
|
|
|
|
// 以下是消息状态
|
|
|
|
|
|
MSG_STATUS_READ = 1 // 已读
|
|
|
|
|
|
MSG_STATUS_UNREAD = 0 // 未读
|
|
|
|
|
|
)
|
|
|
|
|
|
|
2024-08-30 11:28:27 +08:00
|
|
|
|
const (
|
|
|
|
|
|
//文件上传类型
|
|
|
|
|
|
File_TYPE = 1 // 通用文件
|
|
|
|
|
|
//用于视频解析
|
|
|
|
|
|
Video_TYPE = 2 // 视频文件
|
|
|
|
|
|
)
|
|
|
|
|
|
|
2024-06-28 10:38:55 +08:00
|
|
|
|
type User struct {
|
2024-06-28 10:10:23 +08:00
|
|
|
|
gorm.Model
|
|
|
|
|
|
Name string `gorm:"column:name"`
|
|
|
|
|
|
Age int `gorm:"column:age"`
|
|
|
|
|
|
Email string `gorm:"column:email"`
|
|
|
|
|
|
Gender string `gorm:"column:gender"`
|
|
|
|
|
|
}
|
2024-09-22 13:59:33 +08:00
|
|
|
|
|
|
|
|
|
|
type ConfigStruct struct {
|
2024-12-11 16:10:56 +08:00
|
|
|
|
DB int `json:"db"` // 0: mysql, 1: pg
|
|
|
|
|
|
MYSQL_DSN string `json:"mysql_dsn"`
|
|
|
|
|
|
PG_DSN string `json:"pg_dsn"`
|
|
|
|
|
|
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"`
|
|
|
|
|
|
TOKEN_SECRET string `json:"token_secret"`
|
|
|
|
|
|
CID_BASE_DIR string `json:"cid_base_dir"`
|
|
|
|
|
|
FILE_BASE_DIR string `json:"file_base_dir"`
|
|
|
|
|
|
MONITOR bool `json:"monitor"` // 状态监控及邮件通知
|
2024-12-17 19:19:30 +08:00
|
|
|
|
SERVER_SQL_LOG bool `json:"server_sql_log"` // 服务器sql日志
|
2024-12-11 16:10:56 +08:00
|
|
|
|
SERVER_PORT string `json:"server_port"` // 服务端口
|
|
|
|
|
|
LOG_SAVE_DAYS int `json:"log_save_days"` // 日志保存天数,-1表示不保存,0表示永久保存
|
|
|
|
|
|
SERVER_USER_TYPE string `json:"user_type"` // 服务器用户类型,master: 主服务器,slave: 从服务器,从服务器会定时同步数据
|
|
|
|
|
|
MASTER_SERVER_DOMAIN string `json:"master_server_domain"` // 主服务器域名
|
|
|
|
|
|
USER_SYNC_TIME int `json:"user_sync_time"` // 用户数据同步时间,单位秒
|
2024-12-15 15:43:57 +08:00
|
|
|
|
SERVER_NAME string `json:"server_name"` // 服务器名称,用于区分不同服务器
|
2025-06-06 14:36:59 +08:00
|
|
|
|
MONITOR_SERVER_TOKEN string `json:"monitor_server_token"` // 监控服务器token,用于状态监控及邮件通知
|
2024-09-22 13:59:33 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-07-31 21:03:49 +08:00
|
|
|
|
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)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
log.Println("WriteConfigToFile write file error:", err)
|
|
|
|
|
|
return
|
|
|
|
|
|
}
|
|
|
|
|
|
log.Println("WriteConfigToFile write config to file success")
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-09-22 13:59:33 +08:00
|
|
|
|
// 读取配置文件
|
|
|
|
|
|
func ReadConfig(path string) error {
|
2024-12-21 17:02:37 +08:00
|
|
|
|
//查看配置文件是否存在,不存在则创建
|
|
|
|
|
|
_, err := os.Stat(path)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Config file not found!")
|
|
|
|
|
|
//创建默认配置
|
|
|
|
|
|
DefaultConfig()
|
|
|
|
|
|
//写入json文件
|
|
|
|
|
|
file, err := os.Create(path)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error creating config file")
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
defer file.Close()
|
|
|
|
|
|
encoder := json.NewEncoder(file)
|
|
|
|
|
|
err = encoder.Encode(&Config)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error encoding config")
|
|
|
|
|
|
}
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-09-22 13:59:33 +08:00
|
|
|
|
//读json文件
|
|
|
|
|
|
file, err := os.Open(path)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error opening config file")
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
|
|
|
|
|
defer file.Close()
|
|
|
|
|
|
decoder := json.NewDecoder(file)
|
|
|
|
|
|
err = decoder.Decode(&Config)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
fmt.Println("Error decoding config")
|
2024-11-07 15:55:06 +08:00
|
|
|
|
} else {
|
|
|
|
|
|
if Config.SERVER_PORT == "" {
|
|
|
|
|
|
Config.SERVER_PORT = "8083" // 默认端口
|
|
|
|
|
|
}
|
2024-09-22 13:59:33 +08:00
|
|
|
|
}
|
|
|
|
|
|
SigningKey = []byte(Config.TOKEN_SECRET)
|
|
|
|
|
|
return err
|
|
|
|
|
|
}
|
2024-12-21 17:02:37 +08:00
|
|
|
|
|
|
|
|
|
|
// 默认配置
|
|
|
|
|
|
func DefaultConfig() {
|
|
|
|
|
|
Config.DB = 2
|
|
|
|
|
|
Config.MYSQL_DSN = MYSQL_DSN
|
|
|
|
|
|
Config.PG_DSN = ""
|
|
|
|
|
|
Config.REDIS_ADDR = REDIS_ADDR
|
|
|
|
|
|
Config.TOKEN_USE_REDIS = false
|
|
|
|
|
|
Config.REDIS_User_PW = false
|
|
|
|
|
|
Config.REDIS_PASSWORD = REDIS_PASSWORD
|
|
|
|
|
|
Config.REDIS_DB = REIDS_DB
|
|
|
|
|
|
Config.TOKEN_SECRET = TOKEN_SECRET
|
|
|
|
|
|
Config.CID_BASE_DIR = CID_BASE_DIR
|
|
|
|
|
|
Config.FILE_BASE_DIR = FILE_BASE_DIR
|
|
|
|
|
|
Config.MONITOR = false
|
|
|
|
|
|
Config.SERVER_SQL_LOG = false
|
|
|
|
|
|
Config.SERVER_PORT = "8083"
|
|
|
|
|
|
Config.LOG_SAVE_DAYS = 7
|
|
|
|
|
|
Config.SERVER_USER_TYPE = "master"
|
|
|
|
|
|
Config.MASTER_SERVER_DOMAIN = ""
|
|
|
|
|
|
Config.USER_SYNC_TIME = 86400
|
|
|
|
|
|
Config.SERVER_NAME = "default"
|
|
|
|
|
|
}
|