1
0
mirror of https://github.com/StackExchange/dnscontrol.git synced 2024-05-11 05:55:12 +00:00

Notifications: Add support for Microsoft Teams (#812)

This commit is contained in:
Mike Cochrane
2020-08-15 04:23:54 +12:00
committed by GitHub
parent 690f49e041
commit 889ed75668
2 changed files with 62 additions and 2 deletions

View File

@@ -21,7 +21,8 @@ Notifications are set up in your credentials json file. They will use the `notif
...
} ,
"notifications":{
"slack_url": "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX"
"slack_url": "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX",
"teams_url": "https://outlook.office.com/webhook/00000000-0000-0000-0000-000000000000@00000000-0000-0000-0000-000000000000/IncomingWebhook/00000000000000000000000000000000/00000000-0000-0000-0000-000000000000"
}
```
@@ -36,6 +37,13 @@ Please see the [Slack documentation](https://api.slack.com/messaging/webhooks) o
Configure `slack_url` to this webhook. Mattermost works as well, as they share the same api,
### Microsoft Teams
If you want to use the Teams integration, you need to create a webhook in Teams.
Please see the [Teams documentation](https://docs.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/add-incoming-webhook#add-an-incoming-webhook-to-a-teams-channel)
Configure `teams_url` to this webhook.
### Bonfire
This is stack overflow's built in chat system. This is probably not useful for most people.

View File

@@ -0,0 +1,52 @@
package notifications
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
"strings"
)
func init() {
initers = append(initers, func(cfg map[string]string) Notifier {
url, ok := cfg["slack_url"]
if !ok {
return nil
}
notifier := &slackNotifier{
URL: url,
}
return notifier
})
}
// teamsNotifier sends notifications to teams or mattermost
type teamsNotifier struct {
URL string
}
func (s *teamsNotifier) Notify(domain, provider, msg string, err error, preview bool) {
var payload struct {
Username string `json:"username"`
Text string `json:"text"`
}
payload.Username = "DnsControl"
// Format changes as 'preformated' text
msg = strings.ReplaceAll(msg, "\n", "\n ")
if preview {
payload.Text = fmt.Sprintf("**DnsControl Preview %s**\n%s", domain, msg)
} else if err != nil {
payload.Text = fmt.Sprintf("**DnsControl Error Making Changes %s**\n%s\nError: %s", domain, msg, err)
} else {
payload.Text = fmt.Sprintf("**DnsControl Successfully Changed %s**\n%s", domain, msg)
}
json, _ := json.Marshal(payload)
http.Post(s.URL, "text/json", bytes.NewReader(json))
}
func (s *teamsNotifier) Done() {}