mirror of
https://github.com/acepanel/panel.git
synced 2026-02-04 10:17:17 +08:00
feat: OpenResty支持返回具体错误
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package plugins
|
package plugins
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"regexp"
|
"regexp"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -61,7 +62,8 @@ func (r *OpenRestyController) SaveConfig(ctx http.Context) http.Response {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err := systemctl.Reload("openresty"); err != nil {
|
if err := systemctl.Reload("openresty"); err != nil {
|
||||||
return controllers.Error(ctx, http.StatusInternalServerError, "重载服务失败")
|
_, err = shell.Execf("openresty -t")
|
||||||
|
return controllers.Error(ctx, http.StatusInternalServerError, fmt.Sprintf("重载服务失败: %v", err))
|
||||||
}
|
}
|
||||||
|
|
||||||
return controllers.Success(ctx, nil)
|
return controllers.Success(ctx, nil)
|
||||||
|
|||||||
@@ -88,8 +88,9 @@ func (r *PhpMyAdminController) SetPort(ctx http.Context) http.Response {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := systemctl.Reload("openresty"); err != nil {
|
if err = systemctl.Reload("openresty"); err != nil {
|
||||||
return controllers.Error(ctx, http.StatusInternalServerError, "重载OpenResty失败")
|
_, err = shell.Execf("openresty -t")
|
||||||
|
return controllers.Error(ctx, http.StatusInternalServerError, fmt.Sprintf("重载OpenResty失败: %v", err))
|
||||||
}
|
}
|
||||||
|
|
||||||
return controllers.Success(ctx, nil)
|
return controllers.Success(ctx, nil)
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import (
|
|||||||
"github.com/TheTNB/panel/internal"
|
"github.com/TheTNB/panel/internal"
|
||||||
"github.com/TheTNB/panel/internal/services"
|
"github.com/TheTNB/panel/internal/services"
|
||||||
"github.com/TheTNB/panel/pkg/io"
|
"github.com/TheTNB/panel/pkg/io"
|
||||||
|
"github.com/TheTNB/panel/pkg/shell"
|
||||||
"github.com/TheTNB/panel/pkg/str"
|
"github.com/TheTNB/panel/pkg/str"
|
||||||
"github.com/TheTNB/panel/pkg/systemctl"
|
"github.com/TheTNB/panel/pkg/systemctl"
|
||||||
"github.com/TheTNB/panel/pkg/types"
|
"github.com/TheTNB/panel/pkg/types"
|
||||||
@@ -586,7 +587,8 @@ server
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
if err := systemctl.Reload("openresty"); err != nil {
|
if err := systemctl.Reload("openresty"); err != nil {
|
||||||
return Error(ctx, http.StatusInternalServerError, err.Error())
|
_, err = shell.Execf("openresty -t")
|
||||||
|
return Error(ctx, http.StatusInternalServerError, fmt.Sprintf("重载OpenResty失败: %v", err))
|
||||||
}
|
}
|
||||||
|
|
||||||
return Success(ctx, nil)
|
return Success(ctx, nil)
|
||||||
@@ -652,7 +654,8 @@ func (r *WebsiteController) Status(ctx http.Context) http.Response {
|
|||||||
return ErrorSystem(ctx)
|
return ErrorSystem(ctx)
|
||||||
}
|
}
|
||||||
if err = systemctl.Reload("openresty"); err != nil {
|
if err = systemctl.Reload("openresty"); err != nil {
|
||||||
return Error(ctx, http.StatusInternalServerError, err.Error())
|
_, err = shell.Execf("openresty -t")
|
||||||
|
return Error(ctx, http.StatusInternalServerError, fmt.Sprintf("重载OpenResty失败: %v", err))
|
||||||
}
|
}
|
||||||
|
|
||||||
return Success(ctx, nil)
|
return Success(ctx, nil)
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ import (
|
|||||||
"github.com/TheTNB/panel/pkg/acme"
|
"github.com/TheTNB/panel/pkg/acme"
|
||||||
"github.com/TheTNB/panel/pkg/cert"
|
"github.com/TheTNB/panel/pkg/cert"
|
||||||
"github.com/TheTNB/panel/pkg/io"
|
"github.com/TheTNB/panel/pkg/io"
|
||||||
|
"github.com/TheTNB/panel/pkg/shell"
|
||||||
"github.com/TheTNB/panel/pkg/systemctl"
|
"github.com/TheTNB/panel/pkg/systemctl"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -316,6 +317,7 @@ func (s *CertImpl) ObtainAuto(ID uint) (acme.Certificate, error) {
|
|||||||
return acme.Certificate{}, err
|
return acme.Certificate{}, err
|
||||||
}
|
}
|
||||||
if err = systemctl.Reload("openresty"); err != nil {
|
if err = systemctl.Reload("openresty"); err != nil {
|
||||||
|
_, err = shell.Execf("openresty -t")
|
||||||
return acme.Certificate{}, err
|
return acme.Certificate{}, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -356,6 +358,7 @@ func (s *CertImpl) ObtainManual(ID uint) (acme.Certificate, error) {
|
|||||||
return acme.Certificate{}, err
|
return acme.Certificate{}, err
|
||||||
}
|
}
|
||||||
if err = systemctl.Reload("openresty"); err != nil {
|
if err = systemctl.Reload("openresty"); err != nil {
|
||||||
|
_, err = shell.Execf("openresty -t")
|
||||||
return acme.Certificate{}, err
|
return acme.Certificate{}, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -442,6 +445,7 @@ func (s *CertImpl) Renew(ID uint) (acme.Certificate, error) {
|
|||||||
return acme.Certificate{}, err
|
return acme.Certificate{}, err
|
||||||
}
|
}
|
||||||
if err = systemctl.Reload("openresty"); err != nil {
|
if err = systemctl.Reload("openresty"); err != nil {
|
||||||
|
_, err = shell.Execf("openresty -t")
|
||||||
return acme.Certificate{}, err
|
return acme.Certificate{}, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -474,6 +478,7 @@ func (s *CertImpl) Deploy(ID, WebsiteID uint) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err = systemctl.Reload("openresty"); err != nil {
|
if err = systemctl.Reload("openresty"); err != nil {
|
||||||
|
_, err = shell.Execf("openresty -t")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -290,6 +290,7 @@ server
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err := systemctl.Reload("openresty"); err != nil {
|
if err := systemctl.Reload("openresty"); err != nil {
|
||||||
|
_, err = shell.Execf("openresty -t")
|
||||||
return models.Website{}, err
|
return models.Website{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -334,6 +335,7 @@ func (r *WebsiteImpl) SaveConfig(config requests.SaveConfig) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err = systemctl.Reload("openresty"); err != nil {
|
if err = systemctl.Reload("openresty"); err != nil {
|
||||||
|
_, err = shell.Execf("openresty -t")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -529,7 +531,12 @@ func (r *WebsiteImpl) SaveConfig(config requests.SaveConfig) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return systemctl.Reload("openresty")
|
err = systemctl.Reload("openresty")
|
||||||
|
if err != nil {
|
||||||
|
_, err = shell.Execf("openresty -t")
|
||||||
|
}
|
||||||
|
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Delete 删除网站
|
// Delete 删除网站
|
||||||
@@ -554,7 +561,12 @@ func (r *WebsiteImpl) Delete(id uint) error {
|
|||||||
_ = io.Remove("/www/server/vhost/ssl/" + website.Name + ".key")
|
_ = io.Remove("/www/server/vhost/ssl/" + website.Name + ".key")
|
||||||
_ = io.Remove(website.Path)
|
_ = io.Remove(website.Path)
|
||||||
|
|
||||||
return systemctl.Reload("openresty")
|
err := systemctl.Reload("openresty")
|
||||||
|
if err != nil {
|
||||||
|
_, err = shell.Execf("openresty -t")
|
||||||
|
}
|
||||||
|
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetConfig 获取网站配置
|
// GetConfig 获取网站配置
|
||||||
@@ -577,7 +589,7 @@ func (r *WebsiteImpl) GetConfig(id uint) (types.WebsiteSetting, error) {
|
|||||||
setting.Raw = config
|
setting.Raw = config
|
||||||
|
|
||||||
ports := str.Cut(config, "# port标记位开始", "# port标记位结束")
|
ports := str.Cut(config, "# port标记位开始", "# port标记位结束")
|
||||||
matches := regexp.MustCompile(`listen\s+(.*);`).FindAllStringSubmatch(ports, -1)
|
matches := regexp.MustCompile(`listen\s+([^;]*);?`).FindAllStringSubmatch(ports, -1)
|
||||||
for _, match := range matches {
|
for _, match := range matches {
|
||||||
if len(match) < 2 {
|
if len(match) < 2 {
|
||||||
continue
|
continue
|
||||||
@@ -597,17 +609,17 @@ func (r *WebsiteImpl) GetConfig(id uint) (types.WebsiteSetting, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
serverName := str.Cut(config, "# server_name标记位开始", "# server_name标记位结束")
|
serverName := str.Cut(config, "# server_name标记位开始", "# server_name标记位结束")
|
||||||
match := regexp.MustCompile(`server_name\s+(.*);`).FindStringSubmatch(serverName)
|
match := regexp.MustCompile(`server_name\s+([^;]*);?`).FindStringSubmatch(serverName)
|
||||||
if len(match) > 1 {
|
if len(match) > 1 {
|
||||||
setting.Domains = strings.Split(match[1], " ")
|
setting.Domains = strings.Split(match[1], " ")
|
||||||
}
|
}
|
||||||
root := str.Cut(config, "# root标记位开始", "# root标记位结束")
|
root := str.Cut(config, "# root标记位开始", "# root标记位结束")
|
||||||
match = regexp.MustCompile(`root\s+(.*);`).FindStringSubmatch(root)
|
match = regexp.MustCompile(`root\s+([^;]*);?`).FindStringSubmatch(root)
|
||||||
if len(match) > 1 {
|
if len(match) > 1 {
|
||||||
setting.Root = match[1]
|
setting.Root = match[1]
|
||||||
}
|
}
|
||||||
index := str.Cut(config, "# index标记位开始", "# index标记位结束")
|
index := str.Cut(config, "# index标记位开始", "# index标记位结束")
|
||||||
match = regexp.MustCompile(`index\s+(.*);`).FindStringSubmatch(index)
|
match = regexp.MustCompile(`index\s+([^;]*);?`).FindStringSubmatch(index)
|
||||||
if len(match) > 1 {
|
if len(match) > 1 {
|
||||||
setting.Index = match[1]
|
setting.Index = match[1]
|
||||||
}
|
}
|
||||||
@@ -631,29 +643,31 @@ func (r *WebsiteImpl) GetConfig(id uint) (types.WebsiteSetting, error) {
|
|||||||
ssl := str.Cut(config, "# ssl标记位开始", "# ssl标记位结束")
|
ssl := str.Cut(config, "# ssl标记位开始", "# ssl标记位结束")
|
||||||
setting.HttpRedirect = strings.Contains(ssl, "# http重定向标记位")
|
setting.HttpRedirect = strings.Contains(ssl, "# http重定向标记位")
|
||||||
setting.Hsts = strings.Contains(ssl, "# hsts标记位")
|
setting.Hsts = strings.Contains(ssl, "# hsts标记位")
|
||||||
if decode, err := cert.ParseCert(crt); err == nil {
|
|
||||||
setting.SslNotBefore = decode.NotBefore.Format("2006-01-02 15:04:05")
|
|
||||||
setting.SslNotAfter = decode.NotAfter.Format("2006-01-02 15:04:05")
|
|
||||||
setting.SslIssuer = decode.Issuer.CommonName
|
|
||||||
setting.SslOCSPServer = decode.OCSPServer
|
|
||||||
setting.SSlDNSNames = decode.DNSNames
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
setting.HttpRedirect = false
|
setting.HttpRedirect = false
|
||||||
setting.Hsts = false
|
setting.Hsts = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 解析证书信息
|
||||||
|
if decode, err := cert.ParseCert(crt); err == nil {
|
||||||
|
setting.SslNotBefore = decode.NotBefore.Format("2006-01-02 15:04:05")
|
||||||
|
setting.SslNotAfter = decode.NotAfter.Format("2006-01-02 15:04:05")
|
||||||
|
setting.SslIssuer = decode.Issuer.CommonName
|
||||||
|
setting.SslOCSPServer = decode.OCSPServer
|
||||||
|
setting.SSlDNSNames = decode.DNSNames
|
||||||
|
}
|
||||||
|
|
||||||
waf := str.Cut(config, "# waf标记位开始", "# waf标记位结束")
|
waf := str.Cut(config, "# waf标记位开始", "# waf标记位结束")
|
||||||
setting.Waf = strings.Contains(waf, "waf on;")
|
setting.Waf = strings.Contains(waf, "waf on;")
|
||||||
match = regexp.MustCompile(`waf_mode\s+(.+);`).FindStringSubmatch(waf)
|
match = regexp.MustCompile(`waf_mode\s+([^;]*);?`).FindStringSubmatch(waf)
|
||||||
if len(match) > 1 {
|
if len(match) > 1 {
|
||||||
setting.WafMode = match[1]
|
setting.WafMode = match[1]
|
||||||
}
|
}
|
||||||
match = regexp.MustCompile(`waf_cc_deny\s+(.+);`).FindStringSubmatch(waf)
|
match = regexp.MustCompile(`waf_cc_deny\s+([^;]*);?`).FindStringSubmatch(waf)
|
||||||
if len(match) > 1 {
|
if len(match) > 1 {
|
||||||
setting.WafCcDeny = match[1]
|
setting.WafCcDeny = match[1]
|
||||||
}
|
}
|
||||||
match = regexp.MustCompile(`waf_cache\s+(.+);`).FindStringSubmatch(waf)
|
match = regexp.MustCompile(`waf_cache\s+([^;]*);?`).FindStringSubmatch(waf)
|
||||||
if len(match) > 1 {
|
if len(match) > 1 {
|
||||||
setting.WafCache = match[1]
|
setting.WafCache = match[1]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import (
|
|||||||
"github.com/mholt/acmez/v2/acme"
|
"github.com/mholt/acmez/v2/acme"
|
||||||
"golang.org/x/net/publicsuffix"
|
"golang.org/x/net/publicsuffix"
|
||||||
|
|
||||||
|
"github.com/TheTNB/panel/pkg/shell"
|
||||||
"github.com/TheTNB/panel/pkg/systemctl"
|
"github.com/TheTNB/panel/pkg/systemctl"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -46,6 +47,7 @@ func (s httpSolver) Present(_ context.Context, challenge acme.Challenge) error {
|
|||||||
return fmt.Errorf("无法写入OpenResty配置文件: %w", err)
|
return fmt.Errorf("无法写入OpenResty配置文件: %w", err)
|
||||||
}
|
}
|
||||||
if err = systemctl.Reload("openresty"); err != nil {
|
if err = systemctl.Reload("openresty"); err != nil {
|
||||||
|
_, err = shell.Execf("openresty -t")
|
||||||
return fmt.Errorf("无法重载OpenResty: %w", err)
|
return fmt.Errorf("无法重载OpenResty: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user