mirror of
https://github.com/acepanel/panel.git
synced 2026-02-05 01:48:43 +08:00
feat: 优化对 OpenResty 端口的处理
This commit is contained in:
@@ -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 := `
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"`
|
||||
|
||||
@@ -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",
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 命令
|
||||
|
||||
Reference in New Issue
Block a user