72 lines
1.7 KiB
Go
72 lines
1.7 KiB
Go
package server
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"encoding/json"
|
|
"regexp"
|
|
"strings"
|
|
|
|
"github.com/huoxue1/qinglong-go/service/config"
|
|
"github.com/huoxue1/qinglong-go/utils"
|
|
)
|
|
|
|
func Run(ctx context.Context, path string, query map[string]string, body map[string]any, header map[string]string, isLog bool) string {
|
|
cmd := getCommand(path)
|
|
buffer := bytes.NewBuffer([]byte(""))
|
|
option := &utils.RunOption{
|
|
Ctx: ctx,
|
|
Command: cmd,
|
|
Env: getEnv(query, body, header),
|
|
OnStart: func(ctx context.Context) {
|
|
|
|
},
|
|
OnEnd: func(ctx context.Context) {
|
|
|
|
},
|
|
LogFile: buffer,
|
|
CmdDir: "./data/scripts/",
|
|
}
|
|
utils.RunWithOption(ctx, option)
|
|
if isLog {
|
|
return string(buffer.Bytes())
|
|
}
|
|
return getData(buffer.Bytes())
|
|
}
|
|
|
|
func getCommand(path string) (cmd string) {
|
|
|
|
pythonCmd := config.GetKey("PythonCmd", "python")
|
|
JsCmd := config.GetKey("JsCmd", "node")
|
|
ShCmd := config.GetKey("ShCmd", "bash")
|
|
|
|
if strings.HasSuffix(path, ".py") {
|
|
cmd = pythonCmd + " " + path
|
|
} else if strings.HasSuffix(path, ".js") {
|
|
cmd = JsCmd + " " + path
|
|
} else if strings.HasSuffix(path, ".sh") {
|
|
cmd = ShCmd + " " + path
|
|
}
|
|
return
|
|
}
|
|
|
|
func getData(data []byte) (result string) {
|
|
resultReg := `>>>(.*?)<<<`
|
|
compile := regexp.MustCompile(resultReg)
|
|
if compile.Match(data) {
|
|
result = string(compile.FindAllSubmatch(data, -1)[0][1])
|
|
}
|
|
return result
|
|
}
|
|
|
|
func getEnv(query map[string]string, body map[string]any, header map[string]string) map[string]string {
|
|
queryData, _ := json.Marshal(query)
|
|
bodyData, _ := json.Marshal(body)
|
|
headerData, _ := json.Marshal(header)
|
|
return map[string]string{
|
|
"QL_HEADERS": string(headerData),
|
|
"QL_BODY": string(bodyData),
|
|
"QL_QUERY": string(queryData),
|
|
}
|
|
}
|