You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
backy/pkg/notification/notification.go

102 lines
2.7 KiB

// notification.go
// Copyright (C) Andrew Woodlee 2023
// License: Apache-2.0
package notification
import (
"fmt"
"git.andrewnw.xyz/CyberShell/backy/pkg/backy"
"github.com/nikoksr/notify"
"github.com/nikoksr/notify/service/mail"
"github.com/nikoksr/notify/service/matrix"
"maunium.net/go/mautrix/id"
)
type matrixStruct struct {
homeserver string
roomid id.RoomID
accessToken string
userId id.UserID
}
type mailConfig struct {
senderaddress string
host string
to []string
username string
password string
port string
}
var services []notify.Notifier
func SetupCommandsNotifiers(backyConfig backy.BackyConfigFile, ids ...string) {
}
// SetupNotify sets up notify instances for each command list.
func SetupNotify(backyConfig backy.BackyConfigFile) {
for _, cmdConfig := range backyConfig.CmdConfigLists {
for notifyID, notifConfig := range cmdConfig.NotificationsConfig {
if cmdConfig.NotificationsConfig[notifyID].Enabled {
config := notifConfig.Config
switch notifConfig.Config.GetString("type") {
case "matrix":
// println(config.GetString("access-token"))
mtrx := matrixStruct{
userId: id.UserID(config.GetString("user-id")),
roomid: id.RoomID(config.GetString("room-id")),
accessToken: config.GetString("access-token"),
homeserver: config.GetString("homeserver"),
}
mtrxClient, _ := setupMatrix(mtrx)
services = append(services, mtrxClient)
case "mail":
mailCfg := mailConfig{
senderaddress: config.GetString("senderaddress"),
password: config.GetString("password"),
username: config.GetString("username"),
to: config.GetStringSlice("to"),
host: config.GetString("host"),
port: fmt.Sprint(config.GetUint16("port")),
}
mailClient := setupMail(mailCfg)
services = append(services, mailClient)
}
}
}
}
backyNotify := notify.New()
backyNotify.UseServices(services...)
// err := backyNotify.Send(
// context.Background(),
// "Subject/Title",
// "The actual message - Hello, you awesome gophers! :)",
// )
// if err != nil {
// panic(err)
// }
// logging.ExitWithMSG("This was a test of notifications", 0, nil)
}
func setupMatrix(config matrixStruct) (*matrix.Matrix, error) {
matrixClient, matrixErr := matrix.New(config.userId, config.roomid, config.homeserver, config.accessToken)
if matrixErr != nil {
panic(matrixErr)
}
return matrixClient, nil
}
func setupMail(config mailConfig) *mail.Mail {
mailClient := mail.New(config.senderaddress, config.host+":"+config.port)
mailClient.AuthenticateSMTP("", config.username, config.password, config.host)
mailClient.AddReceivers(config.to...)
return mailClient
}