events_triggers.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package events_stream
  2. import (
  3. "github.com/bettercap/bettercap/session"
  4. "github.com/evilsocket/islazy/tui"
  5. )
  6. func (mod *EventsStream) addTrigger(tag string, command string) error {
  7. if err, id := mod.triggerList.Add(tag, command); err != nil {
  8. return err
  9. } else {
  10. mod.Info("trigger for event %s added with identifier '%s'", tui.Green(tag), tui.Bold(id))
  11. }
  12. return nil
  13. }
  14. func (mod *EventsStream) clearTrigger(id string) error {
  15. if err := mod.triggerList.Del(id); err != nil {
  16. return err
  17. }
  18. return nil
  19. }
  20. func (mod *EventsStream) showTriggers() error {
  21. colNames := []string{
  22. "ID",
  23. "Event",
  24. "Action",
  25. }
  26. rows := [][]string{}
  27. mod.triggerList.Each(func(id string, t Trigger) {
  28. rows = append(rows, []string{
  29. tui.Bold(id),
  30. tui.Green(t.For),
  31. t.Action,
  32. })
  33. })
  34. if len(rows) > 0 {
  35. tui.Table(mod.Session.Events.Stdout, colNames, rows)
  36. mod.Session.Refresh()
  37. }
  38. return nil
  39. }
  40. func (mod *EventsStream) dispatchTriggers(e session.Event) {
  41. if id, cmds, err, found := mod.triggerList.Dispatch(e); err != nil {
  42. mod.Error("error while dispatching event %s: %v", e.Tag, err)
  43. } else if found {
  44. mod.Debug("running trigger %s (cmds:'%s') for event %v", id, cmds, e)
  45. for _, cmd := range session.ParseCommands(cmds) {
  46. if err := mod.Session.Run(cmd); err != nil {
  47. mod.Error("%s", err.Error())
  48. }
  49. }
  50. }
  51. }