mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2025-01-11 01:47:53 +08:00
Notifications: Add support for Microsoft Teams (#812)
This commit is contained in:
parent
690f49e041
commit
889ed75668
2 changed files with 62 additions and 2 deletions
|
@ -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.
|
||||
|
@ -44,7 +52,7 @@ Configure `bonfire_url` to be the full url including room and api key.
|
|||
|
||||
## Future work
|
||||
|
||||
Yes, this seems pretty limited right now in what it can do. We didn't want to add a bunch of notification types if nobody was going to use them. The good news is, it should
|
||||
Yes, this seems pretty limited right now in what it can do. We didn't want to add a bunch of notification types if nobody was going to use them. The good news is, it should
|
||||
be really simple to add more. We gladly welcome any PRs with new notification destinations. Some easy possibilities:
|
||||
|
||||
- Email
|
||||
|
|
52
pkg/notifications/teams.go
Normal file
52
pkg/notifications/teams.go
Normal 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() {}
|
Loading…
Reference in a new issue