115 lines
2.5 KiB
Go
115 lines
2.5 KiB
Go
package main
|
|
|
|
import (
|
|
_ "embed"
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
"strings"
|
|
"time"
|
|
|
|
"dyproxy/modules/proxy"
|
|
|
|
"github.com/lxn/walk"
|
|
. "github.com/lxn/walk/declarative"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
var (
|
|
outTE *walk.TextEdit
|
|
wnd *walk.MainWindow
|
|
btnService *walk.PushButton
|
|
err error
|
|
pr *proxy.Proxy
|
|
)
|
|
|
|
//go:embed ca.crt
|
|
var ca []byte
|
|
|
|
func init() {
|
|
// if go os is windows
|
|
if strings.ToLower(os.Getenv("GOOS")) == "windows" {
|
|
// get tmp path
|
|
tmpPath := os.TempDir()
|
|
// write ca.crt to tmp path
|
|
err := os.WriteFile(tmpPath+"/ca.crt", ca, 0o644)
|
|
if err != nil {
|
|
logrus.Fatal(err)
|
|
}
|
|
logrus.Info("import root cert")
|
|
// run certutil.exe -addstore root tmpPath+"/ca.crt"
|
|
cmd := exec.Command("certutil.exe", "-addstore", "root", tmpPath+"/ca.crt")
|
|
err = cmd.Run()
|
|
if err != nil {
|
|
logrus.Fatal(err)
|
|
}
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
MainWindow{
|
|
AssignTo: &wnd,
|
|
Title: "粉丝代理服务",
|
|
Size: Size{300, 300},
|
|
Layout: VBox{},
|
|
Children: []Widget{
|
|
PushButton{
|
|
Text: "开启服务",
|
|
MinSize: Size{300, 50},
|
|
AssignTo: &btnService,
|
|
OnClicked: func() {
|
|
errChan := make(chan error)
|
|
if btnService.Text() == "开启服务" {
|
|
btnService.SetEnabled(false)
|
|
outTE.AppendText("服务启动中...\r\n")
|
|
if pr == nil {
|
|
pr = proxy.NewProxy("https://f.jdwan.com", false, 10)
|
|
|
|
go func() {
|
|
errChan <- pr.Serve(29999)
|
|
}()
|
|
}
|
|
select {
|
|
case err := <-errChan:
|
|
outTE.AppendText(err.Error() + "\r\n")
|
|
case <-time.After(2 * time.Second):
|
|
outTE.AppendText("服务启动成功\r\n")
|
|
btnService.SetText("停止服务")
|
|
go func() {
|
|
err = <-errChan
|
|
outTE.AppendText("[ERR] " + err.Error() + "\r\n")
|
|
btnService.SetText("开启服务")
|
|
btnService.SetEnabled(true)
|
|
}()
|
|
}
|
|
btnService.SetEnabled(true)
|
|
} else {
|
|
btnService.SetEnabled(false)
|
|
outTE.AppendText("服务停止中...\r\n")
|
|
pr.Shutdown()
|
|
outTE.AppendText("服务停止成功\r\n")
|
|
btnService.SetText("开启服务")
|
|
btnService.SetEnabled(true)
|
|
}
|
|
},
|
|
},
|
|
TextEdit{AssignTo: &outTE, ReadOnly: true},
|
|
},
|
|
}.Create()
|
|
|
|
wnd.Closing().Attach(func(canceled *bool, reason walk.CloseReason) {
|
|
fmt.Println("Application closing.")
|
|
if pr != nil {
|
|
outTE.AppendText("服务停止中...\r\n")
|
|
pr.Shutdown()
|
|
outTE.AppendText("服务停止成功\r\n")
|
|
}
|
|
})
|
|
|
|
wnd.Disposing().Attach(func() {
|
|
fmt.Println("Application has exited.")
|
|
})
|
|
|
|
wnd.Run()
|
|
}
|