Refactor configuration management by replacing direct config usage with goodlink_config package across multiple files. This change enhances code organization and clarity by centralizing configuration handling, while also removing the obsolete config.go file.

This commit is contained in:
kony
2026-03-19 12:29:52 +08:00
parent 69803374a1
commit f01da3d14b
8 changed files with 22 additions and 105 deletions
-90
View File
@@ -1,90 +0,0 @@
package config
import (
"encoding/json"
"fmt"
"go2"
go2aes "go2/aes"
go2http "go2/http"
"log"
"os"
)
type RedisInfo struct {
Addr string `bson:"addr" json:"addr"`
TlsAddr string `bson:"tls_addr" json:"tls_addr"`
Passwd string `bson:"passwd" json:"passwd"`
Id int `bson:"id" json:"id"`
}
type ConfigInfo struct {
Redis RedisInfo `bson:"redis" json:"redis"`
WorkType string `bson:"work_type" json:"work_type"`
TunKey string `bson:"tun_key" json:"tun_key"`
ConnType string `bson:"conn_type" json:"conn_type"`
LocalIP string `bson:"local_ip" json:"local_ip"`
LocalPort string `bson:"local_port" json:"local_port"`
RemoteType string `bson:"remote_type" json:"remote_type"`
RemoteIP string `bson:"remote_ip" json:"remote_ip"`
RemotePort string `bson:"remote_port" json:"remote_port"`
StunList []string `bson:"stun_list" json:"stun_list"`
DingTalkUrl string `bson:"ding_talk_url" json:"ding_talk_url"`
}
const (
ConfigFileName = "config.json"
)
var (
configInfo ConfigInfo
)
func DeleteLocalConfig() {
log.Println("删除本地配置")
os.Remove(ConfigFileName)
}
func Init() error {
var res []byte
var err error
if res = go2.FileReadAll(ConfigFileName); res == nil {
DeleteLocalConfig()
go2http.DownloadSimple(fmt.Sprintf("https://gitee.com/konyshe/goodlink_conf/raw/master/%s", ConfigFileName), ConfigFileName)
res = go2.FileReadAll(ConfigFileName)
}
if err = json.Unmarshal(go2aes.Decrypt7(res, "goodlink"), &configInfo); err != nil {
DeleteLocalConfig()
return err
}
return nil
}
func GetConfig() ConfigInfo {
if len(configInfo.StunList) == 0 {
Init()
}
return configInfo
}
func GetStunList() []string {
return GetConfig().StunList
}
func GetAddr() string {
return GetConfig().Redis.TlsAddr
}
func GetPasswd() string {
return GetConfig().Redis.Passwd
}
func GetID() int {
return GetConfig().Redis.Id
}
func GetDingTalkUrl() string {
return GetConfig().DingTalkUrl
}
+5 -2
View File
@@ -3,6 +3,9 @@ module goodlink
go 1.25.5
require (
go2 v0.0.0
proxy v0.0.0
goodlink_config v0.0.0
fyne.io/fyne v1.4.3
fyne.io/fyne/v2 v2.7.2
github.com/BurntSushi/toml v1.6.0
@@ -12,12 +15,10 @@ require (
github.com/pkg/errors v0.9.1
github.com/quic-go/quic-go v0.59.0
github.com/sirupsen/logrus v1.9.3
go2 v0.0.0
golang.org/x/sys v0.40.0
golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2
golang.zx2c4.com/wireguard v0.0.0-20250521234502-f333402bd9cb
gvisor.dev/gvisor v0.0.0-20260106215814-b2227fa9cfe0
proxy v0.0.0-00010101000000-000000000000
)
require (
@@ -70,3 +71,5 @@ replace go2 => ../go2
replace proxy => ../proxy
replace goroutine-pool => ../goroutine-pool
replace goodlink_config => ../goodlink3
+3 -2
View File
@@ -11,6 +11,7 @@ import (
_ "goodlink/pro"
"goodlink/stun2"
"goodlink/utils"
goodlink_config "goodlink_config/config"
"log"
"net/http"
_ "net/http/pprof"
@@ -88,10 +89,10 @@ func main() {
}
if !*config.Arg_local_config {
config.DeleteLocalConfig()
goodlink_config.DeleteLocalConfig()
}
config.Init()
goodlink_config.Init()
if *config.Arg_stun_test { // 测试stun节点,开发使用选项
stun2.TestStun()
+2 -1
View File
@@ -9,6 +9,7 @@ import (
"goodlink/theme"
"goodlink/ui2"
"goodlink/utils"
goodlink_config "goodlink_config/config"
_ "net/http/pprof"
@@ -35,7 +36,7 @@ func main() {
// 启动前清理遗留的cmd进程
utils.CleanupOrphanedCmdProcesses()
config.DeleteLocalConfig()
goodlink_config.DeleteLocalConfig()
config.SetVersion(GetVersionFromAppConfig())
+4 -3
View File
@@ -12,6 +12,7 @@ import (
"goodlink/tun"
_ "goodlink/tun"
"goodlink/upnp"
goodlink_config "goodlink_config/config"
"log"
"net"
"time"
@@ -41,9 +42,9 @@ func Init(tun_key string) error {
}
if config.Arg_redis_addr == "" && config.Arg_redis_tls_addr == "" {
redis_addr = config.GetAddr()
redis_pass = config.GetPasswd()
redis_id = config.GetID()
redis_addr = goodlink_config.GetAddr()
redis_pass = goodlink_config.GetPasswd()
redis_id = goodlink_config.GetID()
} else if config.Arg_redis_tls_addr != "" {
redis_addr = config.Arg_redis_tls_addr
+2 -2
View File
@@ -5,12 +5,12 @@ import (
"crypto/rand"
"encoding/binary"
"fmt"
"goodlink/config"
"log"
"net"
"time"
go2pool "go2/pool"
goodlink_config "goodlink_config/config"
)
// extraLogSink 可选:由 UI 设置后,STUN 相关日志会同时输出到该回调(如运行日志列表),cmd 不设置则为 nil
@@ -234,7 +234,7 @@ func GetStunIpPort(conn *net.UDPConn) (wan_ip string, wan_port1, wan_port2, wan_
var err error
for {
stun_svr_list := config.GetStunList()
stun_svr_list := goodlink_config.GetStunList()
for _, stun_svr := range stun_svr_list {
wan_ip, wan_port1, wan_port2, wan_port3, err = GetStunIpPort2(stun_svr, conn)
if err != nil {
+2 -2
View File
@@ -17,9 +17,9 @@ import (
"syscall"
"time"
"goodlink/config"
"goodlink/pro"
"goodlink/utils"
goodlink_config "goodlink_config/config"
_ "embed"
_ "net/http/pprof"
@@ -315,7 +315,7 @@ func startCmdProcess() error {
// 保存配置文件, 下次启动加载
func saveConfig() {
//先对需要填写的数据进行校验
configByte, _ := json.Marshal(&config.ConfigInfo{
configByte, _ := json.Marshal(&goodlink_config.ConfigInfo{
WorkType: GetWorkType(),
TunKey: m_validated_key.Text,
})
+4 -3
View File
@@ -13,6 +13,7 @@ import (
"goodlink/config"
"goodlink/stun2"
goodlink_config "goodlink_config/config"
_ "embed"
_ "net/http/pprof"
@@ -121,7 +122,7 @@ func createButtonWithHighlight(btn *widget.Button, bg *canvas.Rectangle, border
}
// 创建工作模式选择器
func createWorkTypeSelector(configInfo *config.ConfigInfo) fyne.CanvasObject {
func createWorkTypeSelector(configInfo *goodlink_config.ConfigInfo) fyne.CanvasObject {
// 创建本地端按钮
m_btn_local = widget.NewButtonWithIcon(" Local端 ", theme.ComputerIcon(), nil)
@@ -164,7 +165,7 @@ func createWorkTypeSelector(configInfo *config.ConfigInfo) fyne.CanvasObject {
}
// 创建连接密钥输入区域
func createKeyInputSection(configInfo *config.ConfigInfo) fyne.CanvasObject {
func createKeyInputSection(configInfo *goodlink_config.ConfigInfo) fyne.CanvasObject {
m_validated_key = widget.NewEntry()
m_validated_key.SetPlaceHolder("自定义16-24字节长度")
if len(configInfo.TunKey) > 0 {
@@ -204,7 +205,7 @@ func createKeyButtons() fyne.CanvasObject {
}
func GetMainUI(myWindow *fyne.Window) *fyne.Container {
var configInfo config.ConfigInfo
var configInfo goodlink_config.ConfigInfo
json.Unmarshal(go2.FileReadAll(goodlinkFileName), &configInfo)
log.Println(configInfo)