This commit is contained in:
cdle
2023-06-11 14:09:34 +08:00
parent e985e9db8b
commit d408524fd5
4 changed files with 87 additions and 33 deletions
+4 -3
View File
@@ -76,8 +76,6 @@ var GetUserNumber = func() int {
func init() { func init() {
core.RegistFuncs["Broadcast2WebUser"] = Broadcast2WebUser core.RegistFuncs["Broadcast2WebUser"] = Broadcast2WebUser
core.GinApi(core.GET, "/api/web_chat", func(ctx *gin.Context) {
if adapter == nil {
adapter = &core.Factory{} adapter = &core.Factory{}
adapter.Init("web", "default") adapter.Init("web", "default")
adapter.SetIsAdmin(func(s string) bool { adapter.SetIsAdmin(func(s string) bool {
@@ -97,7 +95,10 @@ func init() {
sendWebMessage(&message) sendWebMessage(&message)
return "" return ""
}) })
} core.GinApi(core.GET, "/api/web_chat", func(ctx *gin.Context) {
// if adapter == nil {
// }
rid := ctx.Query("rid") rid := ctx.Query("rid")
ctt := ctx.Query("ctt") ctt := ctx.Query("ctt")
token, _ := ctx.Cookie("token") token, _ := ctx.Cookie("token")
+20
View File
@@ -1,7 +1,9 @@
package core package core
import ( import (
"fmt"
"net/http" "net/http"
"regexp"
"github.com/dop251/goja" "github.com/dop251/goja"
) )
@@ -12,6 +14,24 @@ func MakeHeadersObject(vm *goja.Runtime, header http.Header) *goja.Object {
return header.Get(name) return header.Get(name)
}) })
obj.Set("gets", func(name string) []string {
return header.Values(name)
})
obj.Set("values", func(name string) []string {
return header.Values(name)
})
obj.Set("cookie", func(name string) string {
for _, v := range header.Values("Set-Cookie") {
res := regexp.MustCompile(fmt.Sprintf("%s=([^;]+)", name)).FindStringSubmatch(v)
if len(res) > 0 {
return res[1]
}
}
return ""
})
obj.Set("has", func(name string) bool { obj.Set("has", func(name string) bool {
return header.Get(name) != "" return header.Get(name) != ""
}) })
+43 -11
View File
@@ -36,6 +36,30 @@ func (sender *Strings) JoinFilepath(elem ...string) string {
return filepath.Join(elem...) return filepath.Join(elem...)
} }
func ForeachObject(m map[string]interface{}, callback func(key, value interface{}) bool) bool {
for k, v := range m {
switch v := v.(type) {
case map[string]interface{}:
if ForeachObject(v, callback) {
return true
}
case []interface{}:
for _, u := range v {
if um, ok := u.(map[string]interface{}); ok {
if ForeachObject(um, callback) {
return true
}
}
}
case string:
if callback(k, v) {
return true
}
}
}
return false
}
func (sender *Strings) Trim(s, cutset string) string { func (sender *Strings) Trim(s, cutset string) string {
return strings.Trim(s, cutset) return strings.Trim(s, cutset)
} }
@@ -66,15 +90,21 @@ func (sender *Strings) Dir(path string) string {
func (sender *Strings) Contains(s string, substr interface{}) bool { func (sender *Strings) Contains(s string, substr interface{}) bool {
switch substr := substr.(type) { switch substr := substr.(type) {
case string: case string:
return strings.Contains(s, substr) if strings.Contains(s, substr) {
return true
}
case []string: case []string:
for _, sub := range substr { for _, sub := range substr {
return strings.Contains(s, sub) if strings.Contains(s, sub) {
return true
}
} }
return false return false
case []interface{}: case []interface{}:
for _, sub := range substr { for _, sub := range substr {
return strings.Contains(s, sub.(string)) if strings.Contains(s, sub.(string)) {
return true
}
} }
return false return false
} }
@@ -141,23 +171,25 @@ func (sender *Strings) EncodeQueryString(params map[string]interface{}) string {
} }
func (sender *Strings) DecodeQueryString(querystring string) map[string]interface{} { func (sender *Strings) DecodeQueryString(querystring string) map[string]interface{} {
values, err := url.ParseQuery(querystring) u, err := url.Parse(querystring)
if err != nil { if err != nil {
panic(err) panic(err)
} }
params := make(map[string]interface{}) params := make(map[string]interface{})
for key, values := range values { for key, values := range u.Query() {
if len(values) > 0 { if len(values) > 0 {
value := values[0] value := values[0]
if intValue, err := strconv.Atoi(value); err == nil { // if intValue, err := strconv.Atoi(value); err == nil {
params[key] = intValue // params[key] = intValue
} else if boolValue, err := strconv.ParseBool(value); err == nil { // } else if boolValue, err := strconv.ParseBool(value); err == nil {
params[key] = boolValue // params[key] = boolValue
} else { // } else {
// params[key] = value
// }
params[key] = value params[key] = value
} }
} }
}
return params return params
} }
+1
View File
@@ -437,6 +437,7 @@ func SetPluginMethod(vm *goja.Runtime, uuid string, on_start bool, running func(
osjs := getJsOs(vm, running) osjs := getJsOs(vm, running)
vm.Set("os", osjs) vm.Set("os", osjs)
vm.Set("fs", osjs) vm.Set("fs", osjs)
vm.Set("forObject", ForeachObject)
} }
func EncryptPlugin(script string) string { func EncryptPlugin(script string) string {