x
This commit is contained in:
+22
-21
@@ -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")
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user