feat(webui): bootstrap account settings management with light and dark mode

This commit is contained in:
Julien Dessaux 2025-01-30 00:19:16 +01:00
parent ab043d8617
commit 98c7d6f578
Signed by: adyxax
GPG key ID: F92E51B86E07177E
13 changed files with 136 additions and 14 deletions

View file

@ -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)