2
0
mirror of https://github.com/acepanel/panel.git synced 2026-02-05 01:48:43 +08:00

feat: 优化对 OpenResty 端口的处理

This commit is contained in:
耗子
2023-11-19 02:10:39 +08:00
parent ff60fb44b7
commit fc9ca25a46
6 changed files with 33 additions and 31 deletions

View File

@@ -221,11 +221,8 @@ func (r *Fail2banController) Add(ctx http.Context) http.Response {
}
var ports string
for _, port := range config.Ports {
if len(strings.Split(port, " ")) > 1 {
ports += strings.Split(port, " ")[0] + ","
} else {
ports += port + ","
}
fields := strings.Fields(cast.ToString(port))
ports += fields[0] + ","
}
rule := `

View File

@@ -274,10 +274,7 @@ func (r *WebsiteController) SaveConfig(ctx http.Context) http.Response {
err := r.website.SaveConfig(saveConfigRequest)
if err != nil {
facades.Log().Request(ctx.Request()).Tags("面板", "网站管理").With(map[string]any{
"error": err.Error(),
}).Info("保存网站配置失败")
return Error(ctx, http.StatusInternalServerError, "保存网站配置失败: "+err.Error())
return Error(ctx, http.StatusInternalServerError, err.Error())
}
return Success(ctx, nil)

View File

@@ -8,7 +8,7 @@ import (
type Add struct {
Name string `form:"name" json:"name"`
Domains []string `form:"domains" json:"domains"`
Ports []string `form:"ports" json:"ports"`
Ports []uint `form:"ports" json:"ports"`
Path string `form:"path" json:"path"`
Php int `form:"php" json:"php"`
Db bool `form:"db" json:"db"`

View File

@@ -8,7 +8,7 @@ import (
type SaveConfig struct {
ID uint `form:"id" json:"id" filter:"uint"`
Domains []string `form:"domains" json:"domains"`
Ports []string `form:"ports" json:"ports"`
Ports []uint `form:"ports" json:"ports"`
Hsts bool `form:"hsts" json:"hsts"`
Ssl bool `form:"ssl" json:"ssl"`
HttpRedirect bool `form:"http_redirect" json:"http_redirect"`
@@ -50,8 +50,8 @@ func (r *SaveConfig) Rules(ctx http.Context) map[string]string {
"raw": "required|string",
"rewrite": "string",
"php": "int",
"ssl_certificate": "required_if:ssl,true|bool",
"ssl_certificate_key": "required_if:ssl,true|bool",
"ssl_certificate": "required_if:ssl,true",
"ssl_certificate_key": "required_if:ssl,true",
}
}

View File

@@ -11,6 +11,7 @@ import (
"strings"
"github.com/goravel/framework/facades"
"github.com/spf13/cast"
requests "panel/app/http/requests/website"
"panel/app/models"
@@ -30,7 +31,7 @@ type PanelWebsite struct {
Name string `json:"name"`
Status bool `json:"status"`
Domains []string `json:"domains"`
Ports []string `json:"ports"`
Ports []uint `json:"ports"`
Path string `json:"path"`
Php int `json:"php"`
Ssl bool `json:"ssl"`
@@ -46,7 +47,7 @@ type PanelWebsite struct {
type WebsiteSetting struct {
Name string `json:"name"`
Domains []string `json:"domains"`
Ports []string `json:"ports"`
Ports []uint `json:"ports"`
Root string `json:"root"`
Path string `json:"path"`
Index string `json:"index"`
@@ -170,22 +171,19 @@ func (r *WebsiteImpl) Add(website PanelWebsite) (models.Website, error) {
portList := ""
domainList := ""
portUsed := make(map[string]bool)
portUsed := make(map[uint]bool)
domainUsed := make(map[string]bool)
for i, port := range website.Ports {
if _, ok := portUsed[port]; !ok {
if i == len(website.Ports)-1 {
portList += " listen " + port + ";"
portList += " listen " + cast.ToString(port) + ";"
} else {
portList += " listen " + port + ";\n"
portList += " listen " + cast.ToString(port) + ";\n"
}
portUsed[port] = true
}
}
if len(website.Ports) == 0 {
portList += " listen 80;\n"
}
for _, domain := range website.Domains {
if _, ok := domainUsed[domain]; !ok {
domainList += " " + domain
@@ -367,16 +365,14 @@ func (r *WebsiteImpl) SaveConfig(config requests.SaveConfig) error {
var port strings.Builder
ports := config.Ports
for i, v := range ports {
if _, err := strconv.Atoi(v); err != nil && v != "443 ssl http2" {
return errors.New("端口格式错误")
}
if v == "443" && config.Ssl {
v = "443 ssl http2"
vStr := cast.ToString(v)
if v == 443 && config.Ssl {
vStr = "443 ssl http2"
}
if i != len(ports)-1 {
port.WriteString(" listen " + v + ";\n")
port.WriteString(" listen " + vStr + ";\n")
} else {
port.WriteString(" listen " + v + ";")
port.WriteString(" listen " + vStr + ";")
}
}
portConfigOld := tools.Cut(raw, "# port标记位开始", "# port标记位结束")
@@ -581,7 +577,9 @@ func (r *WebsiteImpl) GetConfig(id uint) (WebsiteSetting, error) {
if len(match) < 2 {
continue
}
setting.Ports = append(setting.Ports, match[1])
port := strings.Fields(match[1])[0]
setting.Ports = append(setting.Ports, cast.ToUint(port))
}
serverName := tools.Cut(config, "# server_name标记位开始", "# server_name标记位结束")
match := regexp.MustCompile(`server_name\s+(.*);`).FindStringSubmatch(serverName)

View File

@@ -1,6 +1,8 @@
package tools
import (
"bytes"
"errors"
"fmt"
"os"
"os/exec"
@@ -39,8 +41,16 @@ func Remove(path string) error {
func Exec(shell string) (string, error) {
cmd := exec.Command("bash", "-c", "LC_ALL=C "+shell)
output, err := cmd.CombinedOutput()
return strings.TrimSpace(string(output)), err
var stdoutBuf, stderrBuf bytes.Buffer
cmd.Stdout = &stdoutBuf
cmd.Stderr = &stderrBuf
err := cmd.Run()
if err != nil {
return "", errors.New(strings.TrimSpace(stderrBuf.String()))
}
return strings.TrimSpace(stdoutBuf.String()), err
}
// ExecAsync 异步执行 shell 命令