1
0
mirror of https://github.com/bettercap/bettercap.git synced 2025-03-12 04:36:03 -07:00

new: added loadJSON function to the session scripting runtime

This commit is contained in:
Simone Margaritelli 2022-06-10 22:27:13 +02:00
parent 22de9d3d4f
commit eff8135d99
2 changed files with 27 additions and 0 deletions

@ -2,12 +2,16 @@ package session
import (
"encoding/json"
"io/ioutil"
"github.com/bettercap/bettercap/js"
"github.com/evilsocket/islazy/log"
"github.com/robertkrimen/otto"
)
// see https://github.com/robertkrimen/otto/issues/213
var jsRuntime = otto.New()
func jsRunFunc(call otto.FunctionCall) otto.Value {
argv := call.ArgumentList
argc := len(argv)
@ -79,3 +83,25 @@ func jsOnEventFunc(call otto.FunctionCall) otto.Value {
return js.NullValue
}
func jsLoadJSONFunc(call otto.FunctionCall) otto.Value {
argv := call.ArgumentList
argc := len(argv)
if argc != 1 {
return js.ReportError("LoadJSON accepts one string argument")
} else if argv[0].IsString() == false {
return js.ReportError("LoadJSON accepts one string argument")
}
fileName := argv[0].String()
var obj interface{}
if rawData, err := ioutil.ReadFile(fileName); err != nil {
return js.ReportError("can't read '%s': %v", fileName, err)
} else if err = json.Unmarshal(rawData, &obj); err != nil {
return js.ReportError("can't parse '%s': %v", fileName, err)
} else if v, err := jsRuntime.ToValue(obj); err != nil {
return js.ReportError("could not convert '%s' to javascript object: %s", fileName, err)
} else {
return v
}
}

@ -312,6 +312,7 @@ func (s *Session) Start() error {
// js and session
plugin.Defines["env"] = jsEnvFunc
plugin.Defines["run"] = jsRunFunc
plugin.Defines["loadJSON"] = jsLoadJSONFunc
plugin.Defines["onEvent"] = jsOnEventFunc
plugin.Defines["session"] = s