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
+22 -21
View File
@@ -76,28 +76,29 @@ 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) { adapter = &core.Factory{}
if adapter == nil { adapter.Init("web", "default")
adapter = &core.Factory{} adapter.SetIsAdmin(func(s string) bool {
adapter.Init("web", "default") isAdmin, ok := webAdmins.Load(s)
adapter.SetIsAdmin(func(s string) bool { if ok {
isAdmin, ok := webAdmins.Load(s) return isAdmin.(bool)
if ok {
return isAdmin.(bool)
}
return false
})
adapter.SetReplyHandler(func(msg map[string]string) string {
message := WebMessage{
UserID: msg[core.USER_ID],
Images: []string{},
Type: "chat",
Content: msg[core.CONETNT],
}
sendWebMessage(&message)
return ""
})
} }
return false
})
adapter.SetReplyHandler(func(msg map[string]string) string {
message := WebMessage{
UserID: msg[core.USER_ID],
Images: []string{},
Type: "chat",
Content: msg[core.CONETNT],
}
sendWebMessage(&message)
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) != ""
}) })
+44 -12
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,21 +171,23 @@ 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 {