aboutsummaryrefslogtreecommitdiff
path: root/worker.go
diff options
context:
space:
mode:
Diffstat (limited to 'worker.go')
-rw-r--r--worker.go86
1 files changed, 85 insertions, 1 deletions
diff --git a/worker.go b/worker.go
index bccfe74..b39b047 100644
--- a/worker.go
+++ b/worker.go
@@ -6,6 +6,7 @@ package lilin
import (
"bytes"
"encoding/json"
+ "fmt"
"io"
"log"
"net/http"
@@ -14,7 +15,9 @@ import (
"strings"
"time"
+ "git.sr.ht/~shulhan/pakakeh.go/lib/email"
"git.sr.ht/~shulhan/pakakeh.go/lib/ini"
+ "git.sr.ht/~shulhan/pakakeh.go/lib/smtp"
)
// worker contains the report of all services.
@@ -174,6 +177,8 @@ func (wrk *worker) handlePushNotif() {
switch notifConfig.Kind {
case notifKindMattermost:
wrk.pushNotifMattermost(notifConfig, &scanReport)
+ case notifKindSMTP:
+ wrk.pushNotifSMTP(notifConfig, &scanReport)
}
}
}
@@ -213,7 +218,7 @@ func (wrk *worker) pushNotifMattermost(
var req = &http.Request{
Method: http.MethodPost,
- URL: notifConfig.webhookURL,
+ URL: notifConfig.remoteURL,
Header: http.Header{
`Content-Type`: []string{
`application/json`,
@@ -242,3 +247,82 @@ func (wrk *worker) pushNotifMattermost(
log.Printf(`%s: fail with status code %d: %s`, logp, resp.StatusCode, body)
}
+
+// pushNotifSMTP send notification through SMTP.
+func (wrk *worker) pushNotifSMTP(notifConfig *NotifConfig, scanReport *ScanReport) {
+ var logp = `pushNotifSMTP`
+ var msg = email.Message{}
+ var err error
+
+ err = msg.SetFrom(notifConfig.User)
+ if err != nil {
+ log.Printf(`%s: %s`, logp, err)
+ return
+ }
+
+ for _, recipient := range notifConfig.Recipient {
+ err = msg.AddTo(recipient)
+ if err != nil {
+ log.Printf(`%s: %s`, logp, err)
+ return
+ }
+ }
+
+ var subject string
+ var text bytes.Buffer
+ if scanReport.Success {
+ subject = fmt.Sprintf(`[lilin] Service %s is up!`, scanReport.ID)
+ err = notifConfig.upTmpl.Execute(&text, scanReport)
+ if err != nil {
+ log.Printf(`%s: %s`, logp, err)
+ return
+ }
+ } else {
+ subject = fmt.Sprintf(`[lilin] Service %s is down!`, scanReport.ID)
+ err = notifConfig.downTmpl.Execute(&text, scanReport)
+ if err != nil {
+ log.Printf(`%s: %s`, logp, err)
+ return
+ }
+ }
+
+ msg.SetSubject(subject)
+
+ err = msg.SetBodyText(text.Bytes())
+ if err != nil {
+ log.Printf(`%s: %s`, logp, err)
+ return
+ }
+
+ var data []byte
+ data, err = msg.Pack()
+ if err != nil {
+ log.Printf(`%s: %s`, logp, err)
+ return
+ }
+
+ var mailtx = smtp.NewMailTx(notifConfig.User, notifConfig.Recipient, data)
+
+ var clientOpts = smtp.ClientOptions{
+ ServerURL: notifConfig.RemoteURL,
+ AuthUser: notifConfig.User,
+ AuthPass: notifConfig.Password,
+ AuthMechanism: smtp.SaslMechanismPlain,
+ }
+ var smtpc *smtp.Client
+ smtpc, err = smtp.NewClient(clientOpts)
+ if err != nil {
+ log.Printf(`%s: %s`, logp, err)
+ return
+ }
+
+ _, err = smtpc.MailTx(mailtx)
+ if err != nil {
+ log.Printf(`%s: %s`, logp, err)
+ }
+
+ _, err = smtpc.Quit()
+ if err != nil {
+ log.Printf(`%s: %s`, logp, err)
+ }
+}