|
|
@@ -0,0 +1,74 @@
|
|
|
+package console
|
|
|
+
|
|
|
+import (
|
|
|
+ _ "embed"
|
|
|
+ "fmt"
|
|
|
+ "net/http"
|
|
|
+ "os"
|
|
|
+ "os/exec"
|
|
|
+ "path/filepath"
|
|
|
+ "regexp"
|
|
|
+ "runtime"
|
|
|
+ "strings"
|
|
|
+
|
|
|
+ "github.com/gin-gonic/gin"
|
|
|
+)
|
|
|
+
|
|
|
+//go:embed upmtpgo.sh
|
|
|
+var strShell string
|
|
|
+
|
|
|
+var IsUpdateing = false
|
|
|
+
|
|
|
+// MakeUpdateScript 生成脚本
|
|
|
+func MakeUpdateScript(c *gin.Context) {
|
|
|
+ if IsUpdateing {
|
|
|
+ c.String(http.StatusOK, "正在升级中...")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
+ if runtime.GOOS == "windows" {
|
|
|
+ c.String(http.StatusOK, "windows不支持, 仅支持linux下执行")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // logger.GetLogger().Debug("*********************auto update*******************************")
|
|
|
+ IsUpdateing = true
|
|
|
+ defer func() {
|
|
|
+ IsUpdateing = false
|
|
|
+ }()
|
|
|
+
|
|
|
+ filename := c.DefaultQuery("filename", "")
|
|
|
+ if createsh() {
|
|
|
+ c.String(http.StatusOK, "正在执行升级, 升级会保留原有的config.yaml,且重启服务。注意:请勿刷新本页面。")
|
|
|
+ rx := regexp.MustCompile(`mtp20_access_*\.zip`) // mtp20_access_20221009092417.zip
|
|
|
+ names := rx.FindStringSubmatch(filename)
|
|
|
+ // 正则表达式检查文件名是否符合规范
|
|
|
+ if len(names) > 0 && names[0] == filename {
|
|
|
+ fmt.Println("filename:", filename)
|
|
|
+ cmd := exec.Command("sh", "./update.sh", filename)
|
|
|
+ fmt.Println("cmd param:", cmd.Args)
|
|
|
+ cmd.Run()
|
|
|
+ } else {
|
|
|
+ _ = exec.Command("sh", "./update.sh").Run()
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ c.String(http.StatusBadRequest, "创建脚本失败, 可能是权限不足")
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// 生成update.sh文件
|
|
|
+func createsh() bool {
|
|
|
+ dir := ""
|
|
|
+ if str, err := filepath.Abs(filepath.Dir(os.Args[0])); err == nil {
|
|
|
+ dir = strings.Replace(str, "\\", "/", -1)
|
|
|
+ } else {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ // 创建文件
|
|
|
+ if f, err := os.OpenFile(dir+"/update.sh", os.O_RDWR|os.O_TRUNC|os.O_CREATE, 0666); err == nil {
|
|
|
+ f.Write([]byte(strShell))
|
|
|
+ f.Close()
|
|
|
+ } else {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ return true
|
|
|
+}
|