From 39f66a981aecd2bf77957a1fa6522bf562dc3dd3 Mon Sep 17 00:00:00 2001 From: wantoper <305986045@qq.com> Date: Tue, 27 May 2025 15:37:40 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E8=B0=83=E6=95=B4=E3=80=911panel?= =?UTF-8?q?=E7=BD=91=E7=AB=99=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/api/access.go | 7 ++- backend/app/dto/response/access.go | 7 +++ backend/internal/cert/deploy/1p_test.go | 9 ++++ backend/internal/cert/deploy/1panel.go | 58 ++++++++++++++++++++----- backend/internal/cert/deploy/btpanel.go | 17 ++++++-- 5 files changed, 83 insertions(+), 15 deletions(-) create mode 100644 backend/app/dto/response/access.go diff --git a/backend/app/api/access.go b/backend/app/api/access.go index 2b9472e..2e32c41 100644 --- a/backend/app/api/access.go +++ b/backend/app/api/access.go @@ -1,6 +1,7 @@ package api import ( + "ALLinSSL/backend/app/dto/response" "ALLinSSL/backend/internal/access" "ALLinSSL/backend/internal/cert/deploy" "ALLinSSL/backend/public" @@ -353,11 +354,13 @@ func GetSiteList(c *gin.Context) { public.FailMsg(c, err.Error()) return } - - var siteList []any + + var siteList []response.AccessSiteList switch form.Type { case "btpanel-site": siteList, err = deploy.BtPanelSiteList(form.ID) + case "1panel-site": + siteList, err = deploy.OnePanelSiteList(form.ID) default: public.FailMsg(c, "不支持的提供商") } diff --git a/backend/app/dto/response/access.go b/backend/app/dto/response/access.go new file mode 100644 index 0000000..f04512c --- /dev/null +++ b/backend/app/dto/response/access.go @@ -0,0 +1,7 @@ +package response + +type AccessSiteList struct { + Id string `json:"id"` + SiteName string `json:"siteName"` + Domain []string `json:"domain"` +} diff --git a/backend/internal/cert/deploy/1p_test.go b/backend/internal/cert/deploy/1p_test.go index b14c34b..c60a165 100644 --- a/backend/internal/cert/deploy/1p_test.go +++ b/backend/internal/cert/deploy/1p_test.go @@ -38,3 +38,12 @@ func TestOnePanelAPITest(t *testing.T) { t.Log("SSHAPITest success") } } + +func TestOnePanelSiteList(t *testing.T) { + result, err := OnePanelSiteList("8") + if err != nil { + t.Fatalf("OnePanelSiteList failed: %v", err) + } else { + t.Logf("OnePanelSiteList success: %v", result) + } +} \ No newline at end of file diff --git a/backend/internal/cert/deploy/1panel.go b/backend/internal/cert/deploy/1panel.go index 8b15342..c6faf31 100644 --- a/backend/internal/cert/deploy/1panel.go +++ b/backend/internal/cert/deploy/1panel.go @@ -1,6 +1,7 @@ package deploy import ( + "ALLinSSL/backend/app/dto/response" "ALLinSSL/backend/internal/access" "bytes" "crypto/md5" @@ -88,11 +89,11 @@ func Request1panel(data *map[string]any, method, providerID, requestUrl string) var res map[string]interface{} err = json.Unmarshal(body, &res) if err != nil { - return nil, fmt.Errorf("证书部署失败: %v", err) + return nil, fmt.Errorf("解析返回值失败: %v", err) } code, ok := res["code"].(float64) if !ok { - return nil, fmt.Errorf("证书部署失败") + return nil, fmt.Errorf("请求失败") } if code != 200 { msg, ok := res["message"].(string) @@ -184,18 +185,20 @@ func Deploy1panelSite(cfg map[string]any) error { if !ok { return fmt.Errorf("获取网站参数失败: data") } - SSLProtocol, ok := siteData["SSLProtocol"].([]any) - if !ok { - return fmt.Errorf("获取网站参数失败: data.SSLProtocol") + + var SSLProtocol []any + if siteData["SSLProtocol"] == nil { + SSLProtocol = []any{"TLSv1.3", "TLSv1.2", "TLSv1.1", "TLSv1"} + } else { + SSLProtocol, ok = siteData["SSLProtocol"].([]any) + if !ok { + return fmt.Errorf("获取网站参数失败: data.SSLProtocol") + } } algorithm, ok := siteData["algorithm"].(string) if !ok { return fmt.Errorf("获取网站参数失败: data.algorithm") } - enable, ok := siteData["enable"].(bool) - if !ok { - return fmt.Errorf("获取网站参数失败: data.enable") - } hsts, ok := siteData["hsts"].(bool) if !ok { return fmt.Errorf("获取网站参数失败: data.hsts") @@ -204,6 +207,9 @@ func Deploy1panelSite(cfg map[string]any) error { if !ok { return fmt.Errorf("获取网站参数失败: data.httpConfig") } + if httpConfig == "" { + httpConfig = "HTTPToHTTPS" + } data := map[string]any{ "SSLProtocol": SSLProtocol, @@ -213,7 +219,7 @@ func Deploy1panelSite(cfg map[string]any) error { "privateKey": keyPem, // "certificatePath": "", // "privateKeyPath": "", - "enable": enable, + "enable": true, "hsts": hsts, "httpConfig": httpConfig, "importType": "paste", @@ -231,4 +237,36 @@ func OnePanelAPITest(providerID string) error { return fmt.Errorf("测试请求失败: %v", err) } return nil +} + +func OnePanelSiteList(providerID string) ([]response.AccessSiteList, error) { + data := map[string]any{ + "name": "", + "order": "null", + "orderBy": "created_at", + "page": 1, + "pageSize": 1000, + "websiteGroupId": 0, + } + siteList, err := Request1panel(&data, "POST", providerID, "api/v1/websites/search") + if err != nil { + return nil, fmt.Errorf("获取网站列表失败 %v", err) + } + + var result []response.AccessSiteList + sites, ok := siteList["data"].(map[string]any)["items"].([]any) + if !ok { + return nil, fmt.Errorf("获取网站列表失败: data.items") + } + + for _, site := range sites { + siteMap, ok := site.(map[string]any) + if !ok { + return nil, fmt.Errorf("获取网站列表失败: site") + } + siteId := strconv.FormatFloat(siteMap["id"].(float64), 'f', -1, 64) + result = append(result, response.AccessSiteList{Id: siteId, SiteName: siteMap["alias"].(string), Domain: []string{}}) + } + + return result, nil } \ No newline at end of file diff --git a/backend/internal/cert/deploy/btpanel.go b/backend/internal/cert/deploy/btpanel.go index e2c6844..337277c 100644 --- a/backend/internal/cert/deploy/btpanel.go +++ b/backend/internal/cert/deploy/btpanel.go @@ -1,6 +1,7 @@ package deploy import ( + "ALLinSSL/backend/app/dto/response" "ALLinSSL/backend/internal/access" "crypto/md5" "crypto/tls" @@ -237,7 +238,7 @@ func BtPanelAPITest(providerID string) error { return nil } -func BtPanelSiteList(providerID string) ([]any, error) { +func BtPanelSiteList(providerID string) ([]response.AccessSiteList, error) { data := url.Values{} data.Set("cert_list", "") siteList, err := RequestBt(&data, "POST", providerID, "ssl?action=GetSiteDomain") @@ -246,6 +247,16 @@ func BtPanelSiteList(providerID string) ([]any, error) { return nil, err } - fmt.Printf("siteList:%#v\n", siteList["all"].([]any)) - return siteList["all"].([]any), nil + var result []response.AccessSiteList + sites, ok := siteList["all"].([]any) + if !ok { + return nil, fmt.Errorf("获取网站列表失败: 数据格式错误") + } + + for _, site := range sites { + result = append(result, response.AccessSiteList{Id: "", SiteName: site.(string), Domain: []string{}}) + } + + //fmt.Printf("siteList:%#v\n", result) + return result, nil }