2021-11-21 15:57:13 +08:00
|
|
|
|
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
|
|
|
|
|
|
|
|
|
|
|
package confirm
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"github.com/TeaOSLab/EdgeAdmin/internal/configs"
|
|
|
|
|
|
"github.com/TeaOSLab/EdgeAdmin/internal/rpc"
|
|
|
|
|
|
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
|
|
|
|
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
|
|
|
|
|
|
"github.com/iwind/TeaGo/Tea"
|
|
|
|
|
|
"github.com/iwind/TeaGo/actions"
|
|
|
|
|
|
"net/url"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
type IndexAction struct {
|
|
|
|
|
|
actionutils.ParentAction
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (this *IndexAction) Init() {
|
|
|
|
|
|
this.Nav("", "", "")
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (this *IndexAction) RunGet(params struct{}) {
|
|
|
|
|
|
var endpoints = []string{}
|
|
|
|
|
|
|
|
|
|
|
|
config, err := configs.LoadAPIConfig()
|
|
|
|
|
|
if err == nil {
|
|
|
|
|
|
endpoints = config.RPC.Endpoints
|
2021-11-21 19:25:42 +08:00
|
|
|
|
this.Data["nodeId"] = config.NodeId
|
|
|
|
|
|
this.Data["secret"] = config.Secret
|
|
|
|
|
|
this.Data["canInstall"] = false
|
|
|
|
|
|
} else {
|
|
|
|
|
|
this.Data["nodeId"] = ""
|
|
|
|
|
|
this.Data["secret"] = ""
|
|
|
|
|
|
this.Data["canInstall"] = true
|
2021-11-21 15:57:13 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if len(endpoints) == 0 {
|
|
|
|
|
|
endpoints = []string{""} // 初始化一个空的
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
this.Data["endpoints"] = endpoints
|
|
|
|
|
|
|
|
|
|
|
|
this.Show()
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (this *IndexAction) RunPost(params struct {
|
|
|
|
|
|
Endpoints []string
|
|
|
|
|
|
NodeId string
|
|
|
|
|
|
Secret string
|
|
|
|
|
|
|
|
|
|
|
|
Must *actions.Must
|
|
|
|
|
|
}) {
|
|
|
|
|
|
var endpoints = []string{}
|
|
|
|
|
|
for _, endpoint := range params.Endpoints {
|
|
|
|
|
|
if len(endpoint) > 0 {
|
|
|
|
|
|
u, err := url.Parse(endpoint)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
this.Fail("API节点地址'" + endpoint + "'格式错误")
|
|
|
|
|
|
}
|
|
|
|
|
|
endpoint = u.Scheme + "://" + u.Host
|
|
|
|
|
|
if u.Scheme != "http" && u.Scheme != "https" {
|
|
|
|
|
|
this.Fail("API节点地址'" + endpoint + "'中的协议错误,目前只支持http或者https")
|
|
|
|
|
|
}
|
|
|
|
|
|
switch u.Scheme {
|
|
|
|
|
|
case "http":
|
|
|
|
|
|
if len(u.Port()) == 0 {
|
|
|
|
|
|
endpoint += ":80"
|
|
|
|
|
|
}
|
|
|
|
|
|
case "https":
|
|
|
|
|
|
if len(u.Port()) == 0 {
|
|
|
|
|
|
endpoint += ":443"
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 检测是否连接
|
|
|
|
|
|
var config = &configs.APIConfig{}
|
|
|
|
|
|
config.NodeId = params.NodeId
|
|
|
|
|
|
config.Secret = params.Secret
|
|
|
|
|
|
config.RPC.Endpoints = []string{endpoint}
|
|
|
|
|
|
client, err := rpc.NewRPCClient(config, false)
|
|
|
|
|
|
if err != nil {
|
2023-06-10 16:31:20 +08:00
|
|
|
|
actionutils.Fail(this, err)
|
|
|
|
|
|
return
|
2021-11-21 15:57:13 +08:00
|
|
|
|
}
|
|
|
|
|
|
_, err = client.APINodeRPC().FindCurrentAPINodeVersion(client.Context(0), &pb.FindCurrentAPINodeVersionRequest{})
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
_ = client.Close()
|
2023-06-10 16:31:20 +08:00
|
|
|
|
actionutils.Fail(this, err)
|
|
|
|
|
|
return
|
2021-11-21 15:57:13 +08:00
|
|
|
|
}
|
|
|
|
|
|
_ = client.Close()
|
|
|
|
|
|
|
|
|
|
|
|
endpoints = append(endpoints, endpoint)
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if len(endpoints) == 0 {
|
|
|
|
|
|
this.Fail("请输入至少一个API节点地址")
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if len(params.NodeId) == 0 {
|
|
|
|
|
|
this.Fail("请输入NodeId")
|
|
|
|
|
|
}
|
|
|
|
|
|
if len(params.Secret) == 0 {
|
|
|
|
|
|
this.Fail("请输入Secret")
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 创建配置文件
|
|
|
|
|
|
config, err := configs.LoadAPIConfig()
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
config = &configs.APIConfig{}
|
|
|
|
|
|
}
|
|
|
|
|
|
config.NodeId = params.NodeId
|
|
|
|
|
|
config.Secret = params.Secret
|
|
|
|
|
|
config.RPC.Endpoints = endpoints
|
|
|
|
|
|
err = config.WriteFile(Tea.ConfigFile("api.yaml"))
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
this.Fail("配置保存失败:" + err.Error())
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
rpcClient, err := rpc.SharedRPC()
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
this.Fail("RPC配置无法读取:" + err.Error())
|
|
|
|
|
|
}
|
|
|
|
|
|
err = rpcClient.UpdateConfig(config)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
this.Fail("重载RPC配置失败:" + err.Error())
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
this.Success()
|
|
|
|
|
|
}
|