xmpp-webhook

webhook to xmpp gateway (clone of https://github.com/opthomas-prime/xmpp-webhook/ with my own mods)
git clone https://git.e1e0.net/xmpp-webhook.git
Log | Files | Refs | README | LICENSE

commit c56647ea173fdf2b4bc34ef609fca7db5d4431b7
parent e1aab5bbd8dedcd6233e8184314c07cde1d9bef3
Author: Paco Esteban <paco@onna.be>
Date:   Wed, 17 Jul 2019 19:08:04 +0200

add file flag creation on alerts

if the alert has a code like AC:0000 on it, it will create a flag file.
That can later be processed by other tasks

Diffstat:
MMakefile | 2+-
Mmain.go | 49+++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 50 insertions(+), 1 deletion(-)

diff --git a/Makefile b/Makefile @@ -1,6 +1,6 @@ BINARY=xmpp-webhook -VERSION=0.1 +VERSION=0.2 BUILD_DATE=`date '+%Y%m%d%H%M'` BUILD=`git rev-parse HEAD` OS=`uname | tr "[:upper:]" "[:lower:]"` diff --git a/main.go b/main.go @@ -3,9 +3,11 @@ package main import ( "flag" "fmt" + "io" "log" "net/http" "os" + "regexp" "strings" "github.com/emgee/go-xmpp/src/xmpp" @@ -17,6 +19,34 @@ var ( BuildDate string ) +func WriteFileFlag(filename string, data string) error { + file, err := os.Create(filename) + if err != nil { + return err + } + defer file.Close() + + _, err = io.WriteString(file, data) + if err != nil { + return err + } + return file.Sync() +} + +func createFolder(path string) error { + if _, err := os.Stat(path); err != nil { + if os.IsNotExist(err) { + err = os.Mkdir(path, 0770) + if err != nil { + return fmt.Errorf("Error while creating folder!") + } + } else { + return fmt.Errorf("Folder exists, but not writable!") + } + } + return nil +} + // starts xmpp session and returns the xmpp client func xmppLogin(id string, pass string) (*xmpp.XMPP, error) { // parse jid structure @@ -61,6 +91,7 @@ func main() { xp := os.Getenv("XMPP_PASS") xr := os.Getenv("XMPP_RECEIVERS") port := os.Getenv("XMPP_HOOK_PORT") + flagsFolder := os.Getenv("XMPP_HOOK_FLAGS_FOLDER") // check if xmpp credentials and receiver list are supplied if len(xi) < 1 || len(xp) < 1 || len(xr) < 1 { @@ -71,6 +102,10 @@ func main() { port = "4321" } + if len(flagsFolder) < 1 { + flagsFolder = "/tmp/xmpp_flags" + } + // connect to xmpp server xc, err := xmppLogin(xi, xp) if err != nil { @@ -112,6 +147,20 @@ func main() { go func() { for m := range messages { for _, r := range strings.Split(xr, ",") { + re := regexp.MustCompile(`AC:\d{4}`) + alertCode := re.FindString(m) + if len(alertCode) > 0 { + log.Printf("Found alert code %s", alertCode) + if err := createFolder(flagsFolder); err != nil { + m = m + "\n" + err.Error() + log.Printf("ERROR: %s", err.Error()) + } + err = WriteFileFlag(flagsFolder + "/" + alertCode, alertCode); + if err != nil { + m = m + "\n" + err.Error() + log.Printf("ERROR (on file creation): %s", err.Error()) + } + } xc.Out <- xmpp.Message{ To: r, Body: []xmpp.MessageBody{