Merge pull request #1145 from bettercap/otto-session-events

Implement addSessionEvent function in HTTP proxy script env
This commit is contained in:
Simone Margaritelli 2024-11-13 11:17:26 +01:00 committed by GitHub
commit 00854261a4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -2,6 +2,7 @@ package http_proxy
import ( import (
"net/http" "net/http"
"strings"
"github.com/bettercap/bettercap/v2/log" "github.com/bettercap/bettercap/v2/log"
"github.com/bettercap/bettercap/v2/session" "github.com/bettercap/bettercap/v2/session"
@ -33,6 +34,31 @@ func LoadHttpProxyScript(path string, sess *session.Session) (err error, s *Http
return return
} }
// define addSessionEvent function
err = plug.Set("addSessionEvent", func(call otto.FunctionCall) otto.Value {
if len(call.ArgumentList) < 2 {
log.Error("Failed to execute 'addSessionEvent' in HTTP proxy: 2 arguments required, but only %d given.", len(call.ArgumentList))
return otto.FalseValue()
}
ottoTag := call.Argument(0)
if !ottoTag.IsString() {
log.Error("Failed to execute 'addSessionEvent' in HTTP proxy: first argument must be a string.")
return otto.FalseValue()
}
tag := strings.TrimSpace(ottoTag.String())
if tag == "" {
log.Error("Failed to execute 'addSessionEvent' in HTTP proxy: tag cannot be empty.")
return otto.FalseValue()
}
data := call.Argument(1)
sess.Events.Add(tag, data)
return otto.TrueValue()
})
if err != nil {
log.Error("Error while defining addSessionEvent function: %+v", err)
return
}
// run onLoad if defined // run onLoad if defined
if plug.HasFunc("onLoad") { if plug.HasFunc("onLoad") {
if _, err = plug.Call("onLoad"); err != nil { if _, err = plug.Call("onLoad"); err != nil {