new: ticker now broadcasts a tick event

This commit is contained in:
Simone Margaritelli 2021-04-07 17:03:47 +02:00
parent 31b06638d8
commit bfe307ffe6
5 changed files with 45 additions and 2 deletions

View file

@ -1,6 +1,8 @@
package session
import (
"encoding/json"
"github.com/bettercap/bettercap/js"
"github.com/evilsocket/islazy/log"
"github.com/robertkrimen/otto"
@ -56,9 +58,18 @@ func jsOnEventFunc(call otto.FunctionCall) otto.Value {
for event := range listener {
if expr == "" || event.Tag == expr {
// some objects don't do well with js, so convert them to a generic map
// before passing them to the callback
var opaque interface{}
if raw, err := json.Marshal(event); err != nil {
I.Events.Log(log.ERROR, "error serializing event %s: %v", event.Tag, err)
} else if err = json.Unmarshal(raw, &opaque); err != nil {
I.Events.Log(log.ERROR, "error serializing event %s: %v", event.Tag, err)
}
// lock vm
I.script.Lock()
if _, err := cb.Call(otto.NullValue(), event); err != nil {
if _, err := cb.Call(otto.NullValue(), opaque); err != nil {
I.Events.Log(log.ERROR, "error dispatching event %s: %v", event.Tag, err)
}
I.script.Unlock()