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() {
core.RegistFuncs["Broadcast2WebUser"] = Broadcast2WebUser
core.GinApi(core.GET, "/api/web_chat", func(ctx *gin.Context) {
if adapter == nil {
adapter = &core.Factory{}
adapter.Init("web", "default")
adapter.SetIsAdmin(func(s string) bool {
isAdmin, ok := webAdmins.Load(s)
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 ""
})
adapter = &core.Factory{}
adapter.Init("web", "default")
adapter.SetIsAdmin(func(s string) bool {
isAdmin, ok := webAdmins.Load(s)
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 ""
})
core.GinApi(core.GET, "/api/web_chat", func(ctx *gin.Context) {
// if adapter == nil {
// }
rid := ctx.Query("rid")
ctt := ctx.Query("ctt")
token, _ := ctx.Cookie("token")
+20
View File
@@ -1,7 +1,9 @@
package core
import (
"fmt"
"net/http"
"regexp"
"github.com/dop251/goja"
)
@@ -12,6 +14,24 @@ func MakeHeadersObject(vm *goja.Runtime, header http.Header) *goja.Object {
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 {
return header.Get(name) != ""
})
+44 -12
View File
@@ -36,6 +36,30 @@ func (sender *Strings) JoinFilepath(elem ...string) string {
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 {
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 {
switch substr := substr.(type) {
case string:
return strings.Contains(s, substr)
if strings.Contains(s, substr) {
return true
}
case []string:
for _, sub := range substr {
return strings.Contains(s, sub)
if strings.Contains(s, sub) {
return true
}
}
return false
case []interface{}:
for _, sub := range substr {
return strings.Contains(s, sub.(string))
if strings.Contains(s, sub.(string)) {
return true
}
}
return false
}
@@ -141,21 +171,23 @@ func (sender *Strings) EncodeQueryString(params map[string]interface{}) string {
}
func (sender *Strings) DecodeQueryString(querystring string) map[string]interface{} {
values, err := url.ParseQuery(querystring)
u, err := url.Parse(querystring)
if err != nil {
panic(err)
}
params := make(map[string]interface{})
for key, values := range values {
for key, values := range u.Query() {
if len(values) > 0 {
value := values[0]
if intValue, err := strconv.Atoi(value); err == nil {
params[key] = intValue
} else if boolValue, err := strconv.ParseBool(value); err == nil {
params[key] = boolValue
} else {
params[key] = value
}
// if intValue, err := strconv.Atoi(value); err == nil {
// params[key] = intValue
// } else if boolValue, err := strconv.ParseBool(value); err == nil {
// params[key] = boolValue
// } else {
// params[key] = value
// }
params[key] = value
}
}
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)
vm.Set("os", osjs)
vm.Set("fs", osjs)
vm.Set("forObject", ForeachObject)
}
func EncryptPlugin(script string) string {