From 8ce605d65edafab2a4e86ab2369a8ecb87fb79a6 Mon Sep 17 00:00:00 2001 From: Henry Dollman Date: Sat, 14 Sep 2024 15:45:57 -0400 Subject: [PATCH] create UserManager --- beszel/internal/entities/user/user.go | 8 ---- beszel/internal/hub/hub.go | 53 ++++------------------ beszel/internal/user/user.go | 64 +++++++++++++++++++++++++++ 3 files changed, 72 insertions(+), 53 deletions(-) delete mode 100644 beszel/internal/entities/user/user.go create mode 100644 beszel/internal/user/user.go diff --git a/beszel/internal/entities/user/user.go b/beszel/internal/entities/user/user.go deleted file mode 100644 index 07d5b2a..0000000 --- a/beszel/internal/entities/user/user.go +++ /dev/null @@ -1,8 +0,0 @@ -package user - -type UserSettings struct { - // Language string `json:"lang"` - ChartTime string `json:"chartTime"` - NotificationEmails []string `json:"emails"` - NotificationWebhooks []string `json:"webhooks"` -} diff --git a/beszel/internal/hub/hub.go b/beszel/internal/hub/hub.go index 8a482cb..a24fccb 100644 --- a/beszel/internal/hub/hub.go +++ b/beszel/internal/hub/hub.go @@ -4,8 +4,8 @@ import ( "beszel" "beszel/internal/alerts" "beszel/internal/entities/system" - "beszel/internal/entities/user" "beszel/internal/records" + "beszel/internal/user" "beszel/site" "context" "crypto/ed25519" @@ -49,8 +49,9 @@ func NewHub(app *pocketbase.PocketBase) *Hub { } func (h *Hub) Run() { - var rm *records.RecordManager - var am *alerts.AlertManager + rm := records.NewRecordManager(h.app) + am := alerts.NewAlertManager(h.app) + um := user.NewUserManager(h.app) // loosely check if it was executed using "go run" isGoRun := strings.HasPrefix(os.Args[0], os.TempDir()) @@ -64,9 +65,6 @@ func (h *Hub) Run() { // initial setup h.app.OnBeforeServe().Add(func(e *core.ServeEvent) error { - // set up record manager and alert manager - rm = records.NewRecordManager(h.app) - am = alerts.NewAlertManager(h.app) // create ssh client config err := h.createSSHClientConfig() if err != nil { @@ -146,15 +144,6 @@ func (h *Hub) Run() { return nil }) - // user creation - set default role to user if unset - h.app.OnModelBeforeCreate("users").Add(func(e *core.ModelEvent) error { - user := e.Model.(*models.Record) - if user.GetString("role") == "" { - user.Set("role", "user") - } - return nil - }) - // system creation defaults h.app.OnModelBeforeCreate("systems").Add(func(e *core.ModelEvent) error { record := e.Model.(*models.Record) @@ -168,36 +157,10 @@ func (h *Hub) Run() { go h.updateSystem(e.Model.(*models.Record)) return nil }) - // default user settings - h.app.OnModelBeforeCreate("user_settings").Add(func(e *core.ModelEvent) error { - record := e.Model.(*models.Record) - // intialize settings with defaults - settings := user.UserSettings{ - // Language: "en", - ChartTime: "1h", - NotificationEmails: []string{}, - NotificationWebhooks: []string{}, - } - record.UnmarshalJSONField("settings", &settings) - if len(settings.NotificationEmails) == 0 { - // get user email from auth record - if errs := h.app.Dao().ExpandRecord(record, []string{"user"}, nil); len(errs) == 0 { - // app.Logger().Error("failed to expand user relation", "errs", errs) - if user := record.ExpandedOne("user"); user != nil { - settings.NotificationEmails = []string{user.GetString("email")} - } else { - log.Println("Failed to get user email from auth record") - } - } else { - log.Println("failed to expand user relation", "errs", errs) - } - } - // if len(settings.NotificationWebhooks) == 0 { - // settings.NotificationWebhooks = []string{""} - // } - record.Set("settings", settings) - return nil - }) + + // handle default values for user / user_settings creation + h.app.OnModelBeforeCreate("users").Add(um.InitializeUserRole) + h.app.OnModelBeforeCreate("user_settings").Add(um.InitializeUserSettings) // do things after a systems record is updated h.app.OnModelAfterUpdate("systems").Add(func(e *core.ModelEvent) error { diff --git a/beszel/internal/user/user.go b/beszel/internal/user/user.go new file mode 100644 index 0000000..40291e3 --- /dev/null +++ b/beszel/internal/user/user.go @@ -0,0 +1,64 @@ +package user + +import ( + "log" + + "github.com/pocketbase/pocketbase" + "github.com/pocketbase/pocketbase/core" + "github.com/pocketbase/pocketbase/models" +) + +type UserManager struct { + app *pocketbase.PocketBase +} + +type UserSettings struct { + // Language string `json:"lang"` + ChartTime string `json:"chartTime"` + NotificationEmails []string `json:"emails"` + NotificationWebhooks []string `json:"webhooks"` +} + +func NewUserManager(app *pocketbase.PocketBase) *UserManager { + return &UserManager{ + app: app, + } +} + +func (um *UserManager) InitializeUserRole(e *core.ModelEvent) error { + user := e.Model.(*models.Record) + if user.GetString("role") == "" { + user.Set("role", "user") + } + return nil +} + +func (um *UserManager) InitializeUserSettings(e *core.ModelEvent) error { + record := e.Model.(*models.Record) + // intialize settings with defaults + settings := UserSettings{ + // Language: "en", + ChartTime: "1h", + NotificationEmails: []string{}, + NotificationWebhooks: []string{}, + } + record.UnmarshalJSONField("settings", &settings) + if len(settings.NotificationEmails) == 0 { + // get user email from auth record + if errs := um.app.Dao().ExpandRecord(record, []string{"user"}, nil); len(errs) == 0 { + // app.Logger().Error("failed to expand user relation", "errs", errs) + if user := record.ExpandedOne("user"); user != nil { + settings.NotificationEmails = []string{user.GetString("email")} + } else { + log.Println("Failed to get user email from auth record") + } + } else { + log.Println("failed to expand user relation", "errs", errs) + } + } + // if len(settings.NotificationWebhooks) == 0 { + // settings.NotificationWebhooks = []string{""} + // } + record.Set("settings", settings) + return nil +}