package status import ( "context" "github.com/safing/portbase/database" "github.com/safing/portbase/database/query" "github.com/safing/portbase/database/record" ) const ( statusDBKey = "core:status/status" ) var ( statusDB = database.NewInterface(nil) hook *database.RegisteredHook ) type statusHook struct { database.HookBase } // UsesPrePut implements the Hook interface. func (sh *statusHook) UsesPrePut() bool { return true } // PrePut implements the Hook interface. func (sh *statusHook) PrePut(r record.Record) (record.Record, error) { // record is already locked! newStatus, err := EnsureSystemStatus(r) if err != nil { return nil, err } // apply applicable settings if SelectedSecurityLevel() != newStatus.SelectedSecurityLevel { module.StartWorker("set selected security level", func(_ context.Context) error { setSelectedSecurityLevel(newStatus.SelectedSecurityLevel) return nil }) } // TODO: allow setting of Gate17 status (on/off) // return original status return status, nil } func initStatusHook() (err error) { hook, err = database.RegisterHook(query.New(statusDBKey), &statusHook{}) return err } func stopStatusHook() error { return hook.Cancel() }