95 lines
2.2 KiB
Go
95 lines
2.2 KiB
Go
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
|
|
}
|