safing-portbase/notifications/module.go

66 lines
1.5 KiB
Go

package notifications
import (
"fmt"
"time"
"github.com/safing/portbase/config"
"github.com/safing/portbase/modules"
)
var module *modules.Module
func init() {
module = modules.Register("notifications", prep, start, nil, "database", "config", "base")
}
func prep() error {
return registerConfig()
}
func start() error {
err := registerAsDatabase()
if err != nil {
return err
}
showConfigLoadingErrors()
go module.StartServiceWorker("cleaner", 1*time.Second, cleaner)
return nil
}
func showConfigLoadingErrors() {
validationErrors := config.GetLoadedConfigValidationErrors()
if len(validationErrors) == 0 {
return
}
// Trigger a module error for more awareness.
module.Error(
"config:validation-errors-on-load",
"Invalid Settings",
"Some current settings are invalid. Please update them and restart the Portmaster.",
)
// Send one notification per invalid setting.
for _, validationError := range config.GetLoadedConfigValidationErrors() {
NotifyError(
fmt.Sprintf("config:validation-error:%s", validationError.Option.Key),
fmt.Sprintf("Invalid Setting for %s", validationError.Option.Name),
fmt.Sprintf(`Your current setting for %s is invalid: %s
Please update the setting and restart the Portmaster, until then the default value is used.`,
validationError.Option.Name,
validationError.Err.Error(),
),
Action{
Text: "Change",
Type: ActionTypeOpenSetting,
Payload: &ActionTypeOpenSettingPayload{
Key: validationError.Option.Key,
},
},
)
}
}