diff --git a/modules/events_stream.go b/modules/events_stream.go index 3fb42bfe..0eea2ad9 100644 --- a/modules/events_stream.go +++ b/modules/events_stream.go @@ -19,6 +19,8 @@ type EventsStream struct { waitChan chan *session.Event eventListener <-chan session.Event quit chan bool + dumpHttpReqs bool + dumpHttpResp bool } func NewEventsStream(s *session.Session) *EventsStream { @@ -112,6 +114,14 @@ func NewEventsStream(s *session.Session) *EventsStream { "", "If not empty, events will be written to this file instead of the standard output.")) + stream.AddParam(session.NewBoolParameter("events.stream.http.request.dump", + "false", + "If true all HTTP requests will be dumped.")) + + stream.AddParam(session.NewBoolParameter("events.stream.http.response.dump", + "false", + "If true all HTTP responses will be dumped.")) + return stream } @@ -136,6 +146,10 @@ func (s *EventsStream) Configure() (err error) { } else if output, err = core.ExpandPath(output); err == nil { s.output, err = os.OpenFile(output, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) } + } else if err, s.dumpHttpReqs = s.BoolParam("events.stream.http.request.dump"); err != nil { + return err + } else if err, s.dumpHttpResp = s.BoolParam("events.stream.http.response.dump"); err != nil { + return err } return err diff --git a/modules/events_view_http.go b/modules/events_view_http.go index 3e9c41bc..e1374dbc 100644 --- a/modules/events_view_http.go +++ b/modules/events_view_http.go @@ -15,49 +15,37 @@ import ( ) var ( - cookieFilter = map[string]bool{ - "__cfduid": true, - "_ga": true, - "_gat": true, - } - reJsonKey = regexp.MustCompile(`("[^"]+"):`) ) func (s *EventsStream) shouldDumpHttpRequest(req HTTPRequest) bool { - // dump if it's not just a GET - if req.Method != "GET" { + if s.dumpHttpReqs { + // dump all + return true + } else if req.Method != "GET" { + // dump if it's not just a GET return true } // search for interesting headers and cookies - for name, values := range req.Headers { + for name, _ := range req.Headers { headerName := strings.ToLower(name) if strings.Contains(headerName, "auth") || strings.Contains(headerName, "token") { return true - } else if headerName == "cookie" { - for _, value := range values { - cookies := strings.Split(value, ";") - for _, cookie := range cookies { - parts := strings.Split(cookie, "=") - if _, found := cookieFilter[parts[0]]; found == false { - return true - } - } - } } } return false } func (s *EventsStream) shouldDumpHttpResponse(res HTTPResponse) bool { - if strings.Contains(res.ContentType, "text/plain") { + if s.dumpHttpResp { + return true + } else if strings.Contains(res.ContentType, "text/plain") { return true } else if strings.Contains(res.ContentType, "application/json") { return true } else if strings.Contains(res.ContentType, "text/xml") { return true } - // search for interesting headers for name, _ := range res.Headers { headerName := strings.ToLower(name) @@ -65,7 +53,6 @@ func (s *EventsStream) shouldDumpHttpResponse(res HTTPResponse) bool { return true } } - return false }