summaryrefslogtreecommitdiff
path: root/pkg/database
diff options
context:
space:
mode:
authorJulien Dessaux2025-01-30 00:19:16 +0100
committerJulien Dessaux2025-01-30 00:19:16 +0100
commit98c7d6f5785182117b9fe6ebd6b892f860bc2024 (patch)
tree261f22399f8f3fce71a2e1c4fc79314c2a8c5efd /pkg/database
parentfix(webui): fix invalid session cookie handling (diff)
downloadtfstated-98c7d6f5785182117b9fe6ebd6b892f860bc2024.tar.gz
tfstated-98c7d6f5785182117b9fe6ebd6b892f860bc2024.tar.bz2
tfstated-98c7d6f5785182117b9fe6ebd6b892f860bc2024.zip
feat(webui): bootstrap account settings management with light and dark mode
Diffstat (limited to '')
-rw-r--r--pkg/database/accounts.go18
-rw-r--r--pkg/database/sql/000_init.sql2
2 files changed, 17 insertions, 3 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)
diff --git a/pkg/database/sql/000_init.sql b/pkg/database/sql/000_init.sql
index 0bcdee1..80e8c8c 100644
--- a/pkg/database/sql/000_init.sql
+++ b/pkg/database/sql/000_init.sql
@@ -10,7 +10,7 @@ CREATE TABLE accounts (
is_admin INTEGER NOT NULL DEFAULT FALSE,
created INTEGER NOT NULL DEFAULT (unixepoch()),
last_login INTEGER NOT NULL DEFAULT (unixepoch()),
- settings TEXT
+ settings BLOB NOT NULL
) STRICT;
CREATE UNIQUE INDEX accounts_username on accounts(username);