diff options
Diffstat (limited to 'pkg/database/accounts.go')
-rw-r--r-- | pkg/database/accounts.go | 18 |
1 files changed, 16 insertions, 2 deletions
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) |