From 5b83a2c0676e0bbb875fe6d2686aa773ac1c7781 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=97=E5=AD=90?= Date: Wed, 25 Oct 2023 21:42:41 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/http/controllers/info_controller.go | 66 ++++++++++++++++--------- config/panel.go | 2 +- pkg/tools/tools.go | 4 ++ routes/api.go | 1 + 4 files changed, 50 insertions(+), 23 deletions(-) diff --git a/app/http/controllers/info_controller.go b/app/http/controllers/info_controller.go index 41289c11..b3d7c346 100644 --- a/app/http/controllers/info_controller.go +++ b/app/http/controllers/info_controller.go @@ -118,33 +118,33 @@ func (c *InfoController) CountInfo(ctx http.Context) http.Response { } db, err := sql.Open("mysql", "root:"+rootPassword+"@unix(/tmp/mysql.sock)/") + defer db.Close() if err != nil { facades.Log().With(map[string]any{ "error": err.Error(), }).Error("[面板][InfoController] 获取数据库列表失败") databaseCount = -1 } else { - defer db.Close() rows, err := db.Query("SHOW DATABASES") + defer rows.Close() if err != nil { facades.Log().With(map[string]any{ "error": err.Error(), }).Error("[面板][InfoController] 获取数据库列表失败") databaseCount = -1 - } - defer rows.Close() + } else { + var databases []database + for rows.Next() { + var d database + err := rows.Scan(&d.Name) + if err != nil { + continue + } - var databases []database - for rows.Next() { - var d database - err := rows.Scan(&d.Name) - if err != nil { - continue + databases = append(databases, d) } - - databases = append(databases, d) + databaseCount = int64(len(databases)) } - databaseCount = int64(len(databases)) } } } @@ -244,23 +244,45 @@ func (c *InfoController) CheckUpdate(ctx http.Context) http.Response { if tools.VersionCompare(version, remote.Version, ">=") { return Success(ctx, http.Json{ - "update": false, - "version": remote.Version, - "name": remote.Name, - "body": remote.Body, - "date": remote.Date, + "update": false, }) } return Success(ctx, http.Json{ - "update": true, - "version": remote.Version, - "name": remote.Name, - "body": remote.Body, - "date": remote.Date, + "update": true, }) } +// UpdateInfo 获取更新信息 +func (c *InfoController) UpdateInfo(ctx http.Context) http.Response { + version := facades.Config().GetString("panel.version") + current, err := tools.GetLatestPanelVersion() + if err != nil { + return Error(ctx, http.StatusInternalServerError, "获取最新版本失败") + } + + if tools.VersionCompare(version, current.Version, ">=") { + return Error(ctx, http.StatusInternalServerError, "当前版本已是最新版本") + } + + versions, err := tools.GenerateVersions(version, current.Version) + if err != nil { + return Error(ctx, http.StatusInternalServerError, "获取更新信息失败") + } + + var versionInfo []tools.PanelInfo + for _, v := range versions { + info, err := tools.GetPanelVersion(v) + if err != nil { + continue + } + + versionInfo = append(versionInfo, info) + } + + return Success(ctx, versionInfo) +} + // Update 更新面板 func (c *InfoController) Update(ctx http.Context) http.Response { var task models.Task diff --git a/config/panel.go b/config/panel.go index 80b19793..0a6c99a8 100644 --- a/config/panel.go +++ b/config/panel.go @@ -8,6 +8,6 @@ func init() { config := facades.Config() config.Add("panel", map[string]any{ "name": "耗子Linux面板", - "version": "v2.0.58", + "version": "v2.0.56", }) } diff --git a/pkg/tools/tools.go b/pkg/tools/tools.go index d42c2c6c..6b81164c 100644 --- a/pkg/tools/tools.go +++ b/pkg/tools/tools.go @@ -241,6 +241,10 @@ func GetPanelVersion(version string) (PanelInfo, error) { var output string isChina := IsChina() + if !strings.HasPrefix(version, "v") { + version = "v" + version + } + if isChina { output = Exec(`curl -sSL "https://jihulab.com/api/v4/projects/haozi-team%2Fpanel/releases/` + version + `"`) } else { diff --git a/routes/api.go b/routes/api.go index be02a547..1379e4e4 100644 --- a/routes/api.go +++ b/routes/api.go @@ -21,6 +21,7 @@ func Api() { r.Middleware(middleware.Jwt()).Get("countInfo", infoController.CountInfo) r.Middleware(middleware.Jwt()).Get("installedDbAndPhp", infoController.InstalledDbAndPhp) r.Middleware(middleware.Jwt()).Get("checkUpdate", infoController.CheckUpdate) + r.Middleware(middleware.Jwt()).Get("updateInfo", infoController.UpdateInfo) r.Middleware(middleware.Jwt()).Post("update", infoController.Update) r.Middleware(middleware.Jwt()).Post("restart", infoController.Restart) })