[系统设置]增加界面设置,可以定制系统名称等

This commit is contained in:
刘祥超
2020-11-22 15:34:13 +08:00
parent 6c2d6f3382
commit 9ddd3756c5
24 changed files with 367 additions and 91 deletions

View File

@@ -1,7 +1,9 @@
package ui
package server
import (
"github.com/TeaOSLab/EdgeAdmin/internal/uimanager"
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
"github.com/iwind/TeaGo/actions"
)
type IndexAction struct {
@@ -13,15 +15,47 @@ func (this *IndexAction) Init() {
}
func (this *IndexAction) RunGet(params struct{}) {
this.Data["serverIsChanged"] = serverConfigIsChanged
config, err := uimanager.LoadUIConfig()
if err != nil {
this.ErrorPage(err)
return
}
this.Data["config"] = config
serverConfig, err := loadServerConfig()
this.Show()
}
func (this *IndexAction) RunPost(params struct {
ProductName string
AdminSystemName string
ShowOpenSourceInfo bool
ShowVersion bool
Version string
Must *actions.Must
CSRF *actionutils.CSRF
}) {
params.Must.
Field("productName", params.ProductName).
Require("请输入产品名称").
Field("adminSystemName", params.AdminSystemName).
Require("请输入管理员系统名称")
config, err := uimanager.LoadUIConfig()
if err != nil {
this.ErrorPage(err)
return
}
config.ProductName = params.ProductName
config.AdminSystemName = params.AdminSystemName
config.ShowOpenSourceInfo = params.ShowOpenSourceInfo
config.ShowVersion = params.ShowVersion
config.Version = params.Version
err = uimanager.UpdateUIConfig(config)
if err != nil {
this.ErrorPage(err)
return
}
this.Data["serverConfig"] = serverConfig
this.Show()
this.Success()
}

View File

@@ -1,4 +1,4 @@
package ui
package server
import (
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/default/settings/settingutils"
@@ -12,9 +12,7 @@ func init() {
Helper(helpers.NewUserMustAuth()).
Helper(settingutils.NewHelper("ui")).
Prefix("/settings/ui").
Get("", new(IndexAction)).
GetPost("/updateHTTPPopup", new(UpdateHTTPPopupAction)).
GetPost("/updateHTTPSPopup", new(UpdateHTTPSPopupAction)).
GetPost("", new(IndexAction)).
EndAll()
})
}

View File

@@ -1,67 +0,0 @@
package ui
import (
"github.com/TeaOSLab/EdgeAdmin/internal/utils"
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
"github.com/iwind/TeaGo/actions"
"net"
)
type UpdateHTTPPopupAction struct {
actionutils.ParentAction
}
func (this *UpdateHTTPPopupAction) Init() {
this.Nav("", "", "")
}
func (this *UpdateHTTPPopupAction) RunGet(params struct{}) {
serverConfig, err := loadServerConfig()
if err != nil {
this.ErrorPage(err)
return
}
this.Data["serverConfig"] = serverConfig
this.Show()
}
func (this *UpdateHTTPPopupAction) RunPost(params struct {
IsOn bool
Listens []string
Must *actions.Must
}) {
defer this.CreateLogInfo("修改管理界面的HTTP设置")
if len(params.Listens) == 0 {
this.Fail("请输入绑定地址")
}
serverConfig, err := loadServerConfig()
if err != nil {
this.Fail("保存失败:" + err.Error())
}
serverConfig.Http.On = params.IsOn
listen := []string{}
for _, addr := range params.Listens {
addr = utils.FormatAddress(addr)
if len(addr) == 0 {
continue
}
if _, _, err := net.SplitHostPort(addr); err != nil {
addr += ":80"
}
listen = append(listen, addr)
}
serverConfig.Http.Listen = listen
err = writeServerConfig(serverConfig)
if err != nil {
this.Fail("保存失败:" + err.Error())
}
this.Success()
}

View File

@@ -1,142 +0,0 @@
package ui
import (
"encoding/json"
"github.com/TeaOSLab/EdgeAdmin/internal/utils"
"github.com/TeaOSLab/EdgeAdmin/internal/web/actions/actionutils"
"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/sslconfigs"
"github.com/iwind/TeaGo/Tea"
"github.com/iwind/TeaGo/actions"
"io/ioutil"
"net"
)
type UpdateHTTPSPopupAction struct {
actionutils.ParentAction
}
func (this *UpdateHTTPSPopupAction) Init() {
this.Nav("", "", "")
}
func (this *UpdateHTTPSPopupAction) RunGet(params struct{}) {
serverConfig, err := loadServerConfig()
if err != nil {
this.ErrorPage(err)
return
}
this.Data["serverConfig"] = serverConfig
// 证书
certConfigs := []*sslconfigs.SSLCertConfig{}
if len(serverConfig.Https.Cert) > 0 && len(serverConfig.Https.Key) > 0 {
certData, err := ioutil.ReadFile(Tea.Root + "/" + serverConfig.Https.Cert)
if err != nil {
this.ErrorPage(err)
return
}
keyData, err := ioutil.ReadFile(Tea.Root + "/" + serverConfig.Https.Key)
if err != nil {
this.ErrorPage(err)
return
}
certConfig := &sslconfigs.SSLCertConfig{
Id: 0,
Name: "-",
CertData: certData,
KeyData: keyData,
}
_ = certConfig.Init()
certConfig.CertData = nil
certConfig.KeyData = nil
certConfigs = append(certConfigs, certConfig)
}
this.Data["certConfigs"] = certConfigs
this.Show()
}
func (this *UpdateHTTPSPopupAction) RunPost(params struct {
IsOn bool
Listens []string
CertIdsJSON []byte
Must *actions.Must
}) {
defer this.CreateLogInfo("修改管理界面的HTTPS设置")
if len(params.Listens) == 0 {
this.Fail("请输入绑定地址")
}
serverConfig, err := loadServerConfig()
if err != nil {
this.Fail("保存失败:" + err.Error())
}
serverConfig.Https.On = params.IsOn
listen := []string{}
for _, addr := range params.Listens {
addr = utils.FormatAddress(addr)
if len(addr) == 0 {
continue
}
if _, _, err := net.SplitHostPort(addr); err != nil {
addr += ":80"
}
listen = append(listen, addr)
}
serverConfig.Https.Listen = listen
// 证书
certIds := []int64{}
err = json.Unmarshal(params.CertIdsJSON, &certIds)
if err != nil {
this.ErrorPage(err)
return
}
if params.IsOn && len(certIds) == 0 {
this.Fail("要启用HTTPS需要先选择或上传一个可用的证书")
}
// 保存证书到本地
if len(certIds) > 0 && certIds[0] != 0 {
certResp, err := this.RPC().SSLCertRPC().FindEnabledSSLCertConfig(this.AdminContext(), &pb.FindEnabledSSLCertConfigRequest{
CertId: certIds[0],
})
if err != nil {
this.ErrorPage(err)
return
}
if len(certResp.CertJSON) == 0 {
this.Fail("选择的证书已失效,请换一个")
}
certConfig := &sslconfigs.SSLCertConfig{}
err = json.Unmarshal(certResp.CertJSON, certConfig)
if err != nil {
this.ErrorPage(err)
return
}
err = ioutil.WriteFile(Tea.ConfigFile("https.key.pem"), certConfig.KeyData, 0666)
if err != nil {
this.Fail("保存密钥失败:" + err.Error())
}
err = ioutil.WriteFile(Tea.ConfigFile("https.cert.pem"), certConfig.CertData, 0666)
if err != nil {
this.Fail("保存证书失败:" + err.Error())
}
serverConfig.Https.Key = "configs/https.key.pem"
serverConfig.Https.Cert = "configs/https.cert.pem"
}
err = writeServerConfig(serverConfig)
if err != nil {
this.Fail("保存配置失败:" + err.Error())
}
this.Success()
}

View File

@@ -1,41 +0,0 @@
package ui
import (
"github.com/iwind/TeaGo"
"github.com/iwind/TeaGo/Tea"
"gopkg.in/yaml.v3"
"io/ioutil"
)
var serverConfigIsChanged = false
// 读取当前服务配置
func loadServerConfig() (*TeaGo.ServerConfig, error) {
configFile := Tea.ConfigFile("server.yaml")
data, err := ioutil.ReadFile(configFile)
if err != nil {
return nil, err
}
serverConfig := &TeaGo.ServerConfig{}
err = yaml.Unmarshal(data, serverConfig)
if err != nil {
return nil, err
}
return serverConfig, nil
}
// 保存当前服务配置
func writeServerConfig(serverConfig *TeaGo.ServerConfig) error {
data, err := yaml.Marshal(serverConfig)
if err != nil {
return err
}
err = ioutil.WriteFile(Tea.ConfigFile("server.yaml"), data, 0666)
if err != nil {
return err
}
serverConfigIsChanged = true
return nil
}