From 98c7d6f5785182117b9fe6ebd6b892f860bc2024 Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Thu, 30 Jan 2025 00:19:16 +0100 Subject: feat(webui): bootstrap account settings management with light and dark mode --- pkg/database/accounts.go | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'pkg/database/accounts.go') diff --git a/pkg/database/accounts.go b/pkg/database/accounts.go index 9adb32d..e6363f1 100644 --- a/pkg/database/accounts.go +++ b/pkg/database/accounts.go @@ -2,6 +2,7 @@ package database import ( "database/sql" + "encoding/json" "errors" "fmt" "log/slog" @@ -31,12 +32,13 @@ func (db *DB) InitAdminAccount() error { salt := helpers.GenerateSalt() hash := helpers.HashPassword(password.String(), salt) if _, err := tx.ExecContext(db.ctx, - `INSERT INTO accounts(username, salt, password_hash, is_admin) - VALUES ("admin", :salt, :hash, TRUE) + `INSERT INTO accounts(username, salt, password_hash, is_admin, settings) + VALUES ("admin", :salt, :hash, TRUE, :settings) ON CONFLICT DO UPDATE SET password_hash = :hash WHERE username = "admin";`, sql.Named("salt", salt), sql.Named("hash", hash), + []byte("{}"), ); err == nil { AdvertiseAdminPassword(password.String()) } else { @@ -136,6 +138,18 @@ func (db *DB) LoadAccountByUsername(username string) (*model.Account, error) { return &account, nil } +func (db *DB) SaveAccountSettings(account *model.Account, settings *model.Settings) error { + data, err := json.Marshal(settings) + if err != nil { + return fmt.Errorf("failed to marshal settings for user %s: %w", account.Username, err) + } + _, err = db.Exec(`UPDATE accounts SET settings = ? WHERE id = ?`, data, account.Id) + if err != nil { + return fmt.Errorf("failed to update settings for user %s: %w", account.Username, err) + } + return nil +} + func (db *DB) TouchAccount(account *model.Account) error { now := time.Now().UTC() _, err := db.Exec(`UPDATE accounts SET last_login = ? WHERE id = ?`, now.Unix(), account.Id) -- cgit v1.2.3