From b9c35e369f0a25aac718cc28955dbacc4fe86983 Mon Sep 17 00:00:00 2001 From: CrazyMax <1951866+crazy-max@users.noreply.github.com> Date: Wed, 29 Jul 2020 21:29:13 +0200 Subject: [PATCH] Add Matrix notification (#136) * Add Matrix notification (#124) * Fix docs Co-authored-by: CrazyMax --- docs/assets/notif/matrix.png | Bin 0 -> 3866 bytes docs/config/index.md | 2 + docs/config/notif.md | 2 + docs/notif/matrix.md | 38 +++++++ go.mod | 3 + go.sum | 9 ++ internal/config/config_test.go | 6 ++ internal/config/fixtures/config.test.yml | 5 + internal/config/fixtures/config.validate.yml | 5 + internal/model/notif.go | 1 + internal/model/notif_matrix.go | 23 ++++ internal/notif/client.go | 4 + internal/notif/matrix/client.go | 105 +++++++++++++++++++ mkdocs.yml | 1 + 14 files changed, 204 insertions(+) create mode 100644 docs/assets/notif/matrix.png create mode 100644 docs/notif/matrix.md create mode 100644 internal/model/notif_matrix.go create mode 100644 internal/notif/matrix/client.go diff --git a/docs/assets/notif/matrix.png b/docs/assets/notif/matrix.png new file mode 100644 index 0000000000000000000000000000000000000000..807beb302ade93a2320c7b57652fd775f6a0f427 GIT binary patch literal 3866 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 0 { + tagTpl = "[**{{ .Entry.Image.Domain }}/{{ .Entry.Image.Path }}:{{ .Entry.Image.Tag }}**]({{ .Entry.Image.HubLink }})" + } + + var msgBuf bytes.Buffer + msgTpl := template.Must(template.New("text").Parse(fmt.Sprintf("Docker tag %s which you subscribed to through {{ .Entry.Provider }} provider has been {{ if (eq .Entry.Status \"new\") }}newly added{{ else }}updated{{ end }} on {{ .Meta.Hostname }}.", tagTpl))) + if err := msgTpl.Execute(&msgBuf, struct { + Meta model.Meta + Entry model.NotifEntry + }{ + Meta: c.meta, + Entry: entry, + }); err != nil { + return err + } + + msgHTML := bluemonday.UGCPolicy().SanitizeBytes( + blackfriday.Run(msgBuf.Bytes()), + ) + + if _, err := m.SendMessageEvent(joined.RoomID, "m.room.message", gomatrix.HTMLMessage{ + Body: msgBuf.String(), + MsgType: "m.notice", + Format: "org.matrix.custom.html", + FormattedBody: string(msgHTML), + }); err != nil { + return errors.Wrap(err, "failed to submit message to Matrix") + } + + return nil +} diff --git a/mkdocs.yml b/mkdocs.yml index 1c4437a8..806a962b 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -93,6 +93,7 @@ nav: - Discord: notif/discord.md - Gotify: notif/gotify.md - Mail: notif/mail.md + - Matrix: notif/matrix.md - Rocket.Chat: notif/rocketchat.md - Script: notif/script.md - Slack: notif/slack.md