fastlink/global.go
2022-08-03 10:30:59 +08:00

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
}