Templating, improved Matrix formatter, Gitlab parser, improved other parsers.

From now OpenSAPS supports template formatting. For examples see
Gitea or Gitlab parser for creating template and data and
matrixconnection.go for how to use them.

Improved Matrix formatter - now we can do links and put repeatables
(like commits) in resulting message.

Added Gitlab parser. Incomplete, but can parse commits, issues,
merge requests, tags messages.

Refactored (a little) Gitea parser. No functional changes, still
only commits parsing.

Both Gitlab and Gitea parsers will put back a message if unknown
message type was passed.
This commit is contained in:
2017-09-13 11:44:25 +05:00
parent ac0a99ce10
commit b58baa8135
9 changed files with 497 additions and 20 deletions

View File

@@ -23,6 +23,7 @@ import (
"fmt"
"io/ioutil"
"net/http"
"net/url"
"strings"
// local
@@ -57,12 +58,30 @@ func (sh SlackHandler) ServeHTTP(respwriter http.ResponseWriter, req *http.Reque
if strings.Contains(url_splitted[2], config.Slack.Random1) && strings.Contains(url_splitted[3], config.Slack.Random2) && strings.Contains(url_splitted[4], config.Slack.LongRandom) {
c.Log.Debugf("Passed data belongs to '%s' and should go to '%s' pusher, protocol '%s'", name, config.Remote.PushTo, config.Remote.Pusher)
// Parse message into SlackMessage structure.
if strings.Contains(string(body)[0:7], "payload") {
// We have HTTP form payload. It still should be a
// parseable JSON string, we just need to do some
// preparations.
// First - remove "payload=" from the beginning.
temp_body := string(body)
temp_body = strings.Replace(temp_body, "payload=", "", 1)
// Second - unescape data.
temp_body, err := url.QueryUnescape(temp_body)
if err != nil {
c.Log.Errorln("Failed to decode body into parseable string!")
return
}
// And finally - convert body back to bytes.
body = []byte(temp_body)
}
slackmsg := slackmessage.SlackMessage{}
err := json.Unmarshal(body, &slackmsg)
if err != nil {
c.Log.Error("Failed to decode JSON into SlackMessage struct: '%s'", err.Error())
return
}
c.Log.Debug("Received message:", fmt.Sprintf("%+v", slackmsg))
c.SendToPusher(config.Remote.Pusher, config.Remote.PushTo, slackmsg)
sent_to_pusher = true
}