fix: docker运行添加转义符

This commit is contained in:
lixiangwuxian 2024-10-25 01:36:04 +08:00
parent 5997c37576
commit 28dec155f8
3 changed files with 20 additions and 4 deletions

View File

@ -1,6 +1,9 @@
package exec
import (
"net/url"
"strings"
"git.lxtend.com/qqbot/constants"
"git.lxtend.com/qqbot/handler"
"git.lxtend.com/qqbot/model"
@ -9,8 +12,8 @@ import (
)
func init() {
handler.RegisterHandler("/exec", runInDocker, constants.LEVEL_TRUSTED)
handler.RegisterHandler("/restart", restartDocker, constants.LEVEL_TRUSTED)
handler.RegisterHandler("exec", runInDocker, constants.LEVEL_TRUSTED)
handler.RegisterHandler("reboot", restartDocker, constants.LEVEL_TRUSTED)
}
func runInDocker(msg model.Message) (reply model.Reply) {
@ -20,12 +23,21 @@ func runInDocker(msg model.Message) (reply model.Reply) {
reply.FromMsg = msg
return
}
if res, err := exec.DockerContainer.CreateAndExecuteCommand(token[1]); err != nil {
decodedCMD, _ := url.QueryUnescape(token[1])
decodedCMD = strings.ReplaceAll(decodedCMD, ",", ",")
decodedCMD = strings.ReplaceAll(decodedCMD, "[", "[")
decodedCMD = strings.ReplaceAll(decodedCMD, "]", "]")
decodedCMD = strings.ReplaceAll(decodedCMD, "&", "&")
if res, err := exec.DockerContainer.ExecCommandInContainer(decodedCMD); err != nil {
reply.ReplyMsg = "Error: " + err.Error()
reply.ReferOriginMsg = true
reply.FromMsg = msg
return
} else {
pos := strings.LastIndex(res, "\n")
if pos != -1 {
res = res[:pos-1]
}
reply.ReplyMsg = res
reply.ReferOriginMsg = true
reply.FromMsg = msg
@ -40,7 +52,7 @@ func restartDocker(msg model.Message) (reply model.Reply) {
reply.FromMsg = msg
return
} else {
reply.ReplyMsg = "成功重启容器"
reply.ReplyMsg = "Restarted"
reply.ReferOriginMsg = true
reply.FromMsg = msg
return

View File

@ -10,6 +10,7 @@ import (
"git.lxtend.com/qqbot/constants"
"git.lxtend.com/qqbot/handler"
"git.lxtend.com/qqbot/model"
docker "git.lxtend.com/qqbot/service/exec"
)
var hasVaildBuild = true
@ -95,6 +96,7 @@ func pullCode(msg model.Message) model.Reply {
func restartProgram() error {
log.Println("重启程序...")
docker.DockerContainer.RemoveContainer()
time.Sleep(500 * time.Millisecond)
path, err := os.Executable()
if err != nil {

View File

@ -5,6 +5,7 @@ import (
"time"
"git.lxtend.com/qqbot/health"
"git.lxtend.com/qqbot/service/exec"
"git.lxtend.com/qqbot/sqlite3"
wsclient "git.lxtend.com/qqbot/ws_client"
"github.com/gin-gonic/gin"
@ -17,6 +18,7 @@ func main() {
log.Print("Recovered in main:", err)
}
}()
defer exec.DockerContainer.RemoveContainer()
gin.SetMode(gin.ReleaseMode)
sqlite3.InitDB()
client, err := wsclient.NewWebSocketClient("ws", "localhost:3001", "")