new: added events.on (and other related commands) to trigger specific actions when an events happens

This commit is contained in:
evilsocket 2019-02-24 20:21:18 +01:00
parent 78c341c2b3
commit 1492bf5e40
No known key found for this signature in database
GPG key ID: 1564D7F30393A456
24 changed files with 4475 additions and 0 deletions

View file

@ -29,6 +29,7 @@ type EventsStream struct {
output *os.File
rotation rotation
ignoreList *IgnoreList
triggerList *TriggerList
waitFor string
waitChan chan *session.Event
eventListener <-chan session.Event
@ -45,6 +46,7 @@ func NewEventsStream(s *session.Session) *EventsStream {
waitChan: make(chan *session.Event),
waitFor: "",
ignoreList: NewIgnoreList(),
triggerList: NewTriggerList(),
}
mod.AddHandler(session.NewModuleHandler("events.stream on", "",
@ -70,6 +72,38 @@ func NewEventsStream(s *session.Session) *EventsStream {
return mod.Show(limit)
}))
on := session.NewModuleHandler("events.on TAG COMMANDS", `events\.on ([^\s]+) (.+)`,
"Run COMMANDS when an event with the specified TAG is triggered.",
func(args []string) error {
return mod.addTrigger(args[0], args[1])
})
on.Complete("events.on", s.EventsCompleter)
mod.AddHandler(on)
mod.AddHandler(session.NewModuleHandler("events.triggers", "",
"Show the list of event triggers created by the events.on command.",
func(args []string) error {
return mod.showTriggers()
}))
onClear := session.NewModuleHandler("events.trigger.delete TRIGGER_ID", `events\.trigger\.delete ([^\s]+)`,
"Remove an event trigger given its TRIGGER_ID (use events.triggers to see the list of triggers).",
func(args []string) error {
return mod.clearTrigger(args[0])
})
onClear.Complete("events.trigger.delete", mod.triggerList.Completer)
mod.AddHandler(onClear)
mod.AddHandler(session.NewModuleHandler("events.triggers.clear", "",
"Remove all event triggers (use events.triggers to see the list of triggers).",
func(args []string) error {
return mod.clearTrigger("")
}))
mod.AddHandler(session.NewModuleHandler("events.waitfor TAG TIMEOUT?", `events.waitfor ([^\s]+)([\s\d]*)`,
"Wait for an event with the given tag either forever or for a timeout in seconds.",
func(args []string) error {
@ -242,6 +276,10 @@ func (mod *EventsStream) Start() error {
mod.View(e, true)
}
// this could generate sys.log events and lock the whole
// events.stream, make it async
go mod.dispatchTriggers(e)
case <-mod.quit:
return
}