package main import ( "encoding/json" "io/ioutil" "log" "os" "time" ) const CLIENT_TYPE_CPP = "cpp" const CLIENT_TYPE_WEB = "Web" const CLIENT_TYPE_FASTLINK_UI = "fastlink_ui" const CLIENT_TYPE_FASTLINK_SERVICE = "fastlink_service" const TOKEN_TYPE_APP = "app" const TOKEN_TYPE_PC = "pc" const TOKEN_PC_MAX_LIFE = 3600 const TOKEN_APP_MAX_LIFE = 86400 const WEB_URL = "https://fastlink.evan.run/" var ( Logger *log.Logger fastLinkService *FastLinkService globalConfig = GlobalConfig{ SignalServer: "https://fastlink.evan.run", StunServers: []string{"stun:106.54.197.45:3478"}, TurnServers: []TurnServer{{ Addr: "turn:106.54.197.45:3478", Password: "evanturn", UserName: "evan", }, { Addr: "turn:221.229.220.67:3478", Password: "evanturn", UserName: "evan", }}, } configPath string LastDeviceId = 0 TimeLocation *time.Location = time.FixedZone("CST", 8*3600) ) type GlobalConfig struct { SignalServer string `json:"signalServer"` StunServers []string `json:"stunServers"` TurnServers []TurnServer `json:"turnServers"` } type TurnServer struct { Addr string `json:"addr"` Password string `json:"password"` UserName string `json:"userName"` } type ConfigData struct { LastDeviceId int `json:"lastDeviceId"` Users []*UserInfo `json:"users"` Devices []*DeviceInfo `json:"devices"` Tokens []*TokenInfo `json:"tokens"` } func SaveConfig() { config := &ConfigData{ Users: fastLinkService.Users, Devices: fastLinkService.Devices, Tokens: fastLinkService.Tokens, LastDeviceId: LastDeviceId, } marshal, _ := json.Marshal(config) ioutil.WriteFile(configPath, marshal, 0777) } func ReadConfig() { b, _ := exists(configPath) if b { configData, _ := ioutil.ReadFile(configPath) var config *ConfigData json.Unmarshal(configData, &config) fastLinkService.FillUsers(config.Users) fastLinkService.FillDevices(config.Devices) fastLinkService.FillTokens(config.Tokens) LastDeviceId = config.LastDeviceId } } func exists(path string) (bool, error) { _, err := os.Stat(path) if err == nil { return true, nil } if os.IsNotExist(err) { return false, nil } return true, err }