From 31589ce234bbf45d7e40d9c1ea9baa5e61f9ce54 Mon Sep 17 00:00:00 2001 From: TsMask <340112800@qq.com> Date: Tue, 7 May 2024 16:26:48 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=B3=BB=E7=BB=9F=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=BC=95=E5=AF=BC=E4=BD=BF=E7=94=A8=E9=87=8D=E7=BD=AE=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/framework/constants/common/common.go | 3 + src/framework/utils/machine/launch.go | 11 +-- src/modules/common/common.go | 9 ++- .../controller/{launch.go => bootloader.go} | 79 +++++++++++++++---- src/modules/common/service/commont.impl.go | 9 ++- 5 files changed, 81 insertions(+), 30 deletions(-) rename src/modules/common/controller/{launch.go => bootloader.go} (52%) diff --git a/src/framework/constants/common/common.go b/src/framework/constants/common/common.go index 37861049..08e0bcbc 100644 --- a/src/framework/constants/common/common.go +++ b/src/framework/constants/common/common.go @@ -19,3 +19,6 @@ const STATUS_NO = "0" // 上下文信息-登录用户 const CTX_LOGIN_USER = "loginuser" + +// 启动-引导系统初始 +const LAUNCH_BOOTLOADER = "bootloader" diff --git a/src/framework/utils/machine/launch.go b/src/framework/utils/machine/launch.go index 6f6e2086..fd3c3e0e 100644 --- a/src/framework/utils/machine/launch.go +++ b/src/framework/utils/machine/launch.go @@ -8,6 +8,7 @@ import ( "runtime" "time" + "be.ems/src/framework/constants/common" "be.ems/src/framework/logger" "be.ems/src/framework/utils/crypto" "be.ems/src/framework/utils/parse" @@ -98,11 +99,11 @@ func Launch() { // 检查文件是否存在 if _, err := os.Stat(filePath()); err != nil { LaunchInfo = map[string]any{ - "code": Code, // 机器码 - "firstTime": time.Now().UnixMilli(), // 首次启动使用时间 + "code": Code, // 机器码 + "useTime": time.Now().UnixMilli(), // 首次使用时间 - "sysGuide": true, // 首次引导 - "sysGuideTime": 0, // 引导完成时间 + common.LAUNCH_BOOTLOADER: true, // 启动引导 + common.LAUNCH_BOOTLOADER + "Time": 0, // 引导完成时间 } codeFileWrite(LaunchInfo) } else { @@ -125,7 +126,7 @@ func SetLaunchInfo(info map[string]any) error { } // 固定值禁止变更 - constKeys := []string{"code", "firstTime"} + constKeys := []string{"code", "useTime"} for k, v := range info { constKey := false for _, ck := range constKeys { diff --git a/src/modules/common/common.go b/src/modules/common/common.go index d08e68c5..fcbf8a9e 100644 --- a/src/modules/common/common.go +++ b/src/modules/common/common.go @@ -25,11 +25,12 @@ func Setup(router *gin.Engine) { // 系统可暴露的配置信息 indexGroup.GET("/sys-conf", controller.NewCommont.SysConfig) - // 首次引导安装 - guideGroup := router.Group("/guide") + // 系统引导初始化 + guideGroup := router.Group("/bootloader") { - guideGroup.POST("", controller.NewLaunch.GuideStart) - guideGroup.PUT("", middleware.PreAuthorize(nil), controller.NewLaunch.GuideDone) + guideGroup.POST("", controller.NewBootloader.BootloaderStart) + guideGroup.PUT("", middleware.PreAuthorize(nil), controller.NewBootloader.BootloaderDone) + guideGroup.DELETE("", middleware.PreAuthorize(nil), controller.NewBootloader.BootloaderReset) } // 验证码操作处理 diff --git a/src/modules/common/controller/launch.go b/src/modules/common/controller/bootloader.go similarity index 52% rename from src/modules/common/controller/launch.go rename to src/modules/common/controller/bootloader.go index ed3d4523..37bdf217 100644 --- a/src/modules/common/controller/launch.go +++ b/src/modules/common/controller/bootloader.go @@ -1,10 +1,13 @@ package controller import ( + "runtime" "time" adminConstants "be.ems/src/framework/constants/admin" + "be.ems/src/framework/constants/common" tokenConstants "be.ems/src/framework/constants/token" + "be.ems/src/framework/utils/cmd" "be.ems/src/framework/utils/ctx" "be.ems/src/framework/utils/machine" tokenUtils "be.ems/src/framework/utils/token" @@ -15,34 +18,34 @@ import ( "github.com/gin-gonic/gin" ) -// 实例化控制层 LaunchController 结构体 -var NewLaunch = &LaunchController{ +// 实例化控制层 BootloaderController 结构体 +var NewBootloader = &BootloaderController{ accountService: commonService.NewAccountImpl, sysUserService: systemService.NewSysUserImpl, } -// 首次启动安装 +// 系统引导初始化 // -// PATH /launch -type LaunchController struct { +// PATH /bootloader +type BootloaderController struct { // 账号身份操作服务 accountService commonService.IAccount // 用户信息服务 sysUserService systemService.ISysUser } -// 首次引导安装开始 +// 首次引导开始 // -// POST /guide -func (s *LaunchController) GuideStart(c *gin.Context) { +// POST / +func (s *BootloaderController) BootloaderStart(c *gin.Context) { // 是否完成引导 launchInfo := machine.LaunchInfo if launchInfo == nil { c.JSON(200, result.Err(nil)) return } - if v, ok := launchInfo["sysGuide"]; ok && !v.(bool) { - c.JSON(200, result.ErrMsg("guide done")) + if v, ok := launchInfo[common.LAUNCH_BOOTLOADER]; ok && !v.(bool) { + c.JSON(200, result.ErrMsg("bootloader done")) return } @@ -79,25 +82,67 @@ func (s *LaunchController) GuideStart(c *gin.Context) { })) } -// 首次引导安装完成 +// 首次引导完成 // -// PUT /guide -func (s *LaunchController) GuideDone(c *gin.Context) { +// PUT / +func (s *BootloaderController) BootloaderDone(c *gin.Context) { // 是否完成引导 launchInfo := machine.LaunchInfo if launchInfo == nil { c.JSON(200, result.Err(nil)) return } - if v, ok := launchInfo["sysGuide"]; ok && !v.(bool) { - c.JSON(200, result.ErrMsg("guide done")) + if v, ok := launchInfo[common.LAUNCH_BOOTLOADER]; ok && !v.(bool) { + c.JSON(200, result.ErrMsg("bootloader done")) return } // 记录完成时间 err := machine.SetLaunchInfo(map[string]any{ - "sysGuide": false, // 首次引导 - "sysGuideTime": time.Now().UnixMilli(), // 引导完成时间 + common.LAUNCH_BOOTLOADER: false, // 启动引导 + common.LAUNCH_BOOTLOADER + "Time": time.Now().UnixMilli(), // 引导完成时间 + }) + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + + // 清除授权信息 + tokenUtils.Remove(ctx.Authorization(c)) + c.JSON(200, result.Ok(nil)) +} + +// 引导系统数据重置 +// +// DELETE / +func (s *BootloaderController) BootloaderReset(c *gin.Context) { + // 是否完成引导 + launchInfo := machine.LaunchInfo + if launchInfo == nil { + c.JSON(200, result.Err(nil)) + return + } + if v, ok := launchInfo[common.LAUNCH_BOOTLOADER]; ok && v.(bool) { + c.JSON(200, result.ErrMsg("bootloader not done")) + return + } + + // 重置数据库 + if runtime.GOOS == "windows" { + c.JSON(200, result.ErrMsg("Does not support window operations")) + return + } else { + _, err := cmd.ExecWithCheck("sudo", "/usr/local/omc/bin/setomc.sh", "-m", "install") + if err != nil { + c.JSON(200, result.ErrMsg(err.Error())) + return + } + } + + // 重置引导标记 + err := machine.SetLaunchInfo(map[string]any{ + "bootloader": true, // 启动引导 + "bootloaderTime": 0, // 引导完成时间 }) if err != nil { c.JSON(200, result.ErrMsg(err.Error())) diff --git a/src/modules/common/service/commont.impl.go b/src/modules/common/service/commont.impl.go index fc94db06..10ad3f8c 100644 --- a/src/modules/common/service/commont.impl.go +++ b/src/modules/common/service/commont.impl.go @@ -5,6 +5,7 @@ import ( "be.ems/lib/global" "be.ems/src/framework/config" + "be.ems/src/framework/constants/common" "be.ems/src/framework/utils/machine" systemService "be.ems/src/modules/system/service" ) @@ -33,13 +34,13 @@ func (s *CommontImpl) SystemConfigInfo() map[string]string { // 系统首次使用标记 launchInfo := machine.LaunchInfo if launchInfo != nil { - if v, ok := launchInfo["sysGuide"]; ok { - infoMap["sysGuide"] = fmt.Sprint(v) + if v, ok := launchInfo[common.LAUNCH_BOOTLOADER]; ok { + infoMap[common.LAUNCH_BOOTLOADER] = fmt.Sprint(v) } else { - infoMap["sysGuide"] = "true" + infoMap[common.LAUNCH_BOOTLOADER] = "true" } } else { - infoMap["sysGuide"] = "true" + infoMap[common.LAUNCH_BOOTLOADER] = "true" } // 序列号 infoMap["serialNum"] = fmt.Sprint(config.Get("omc.sn"))