feat(webui): add user account status page
This commit is contained in:
parent
a22b2953e4
commit
2bf1731343
10 changed files with 230 additions and 12 deletions
|
@ -49,7 +49,7 @@ func (db *DB) CreateAccount(username string, isAdmin bool) (*model.Account, erro
|
|||
Id: accountId,
|
||||
Username: username,
|
||||
IsAdmin: isAdmin,
|
||||
PasswordReset: passwordReset,
|
||||
PasswordReset: &passwordReset,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
@ -91,7 +91,7 @@ func (db *DB) InitAdminAccount() error {
|
|||
|
||||
func (db *DB) LoadAccounts() ([]model.Account, error) {
|
||||
rows, err := db.Query(
|
||||
`SELECT id, username, salt, password_hash, is_admin, created, last_login, settings FROM accounts;`)
|
||||
`SELECT id, username, salt, password_hash, is_admin, created, last_login, settings, password_reset FROM accounts;`)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to load accounts from database: %w", err)
|
||||
}
|
||||
|
@ -111,7 +111,8 @@ func (db *DB) LoadAccounts() ([]model.Account, error) {
|
|||
&account.IsAdmin,
|
||||
&created,
|
||||
&lastLogin,
|
||||
&account.Settings)
|
||||
&account.Settings,
|
||||
&account.PasswordReset)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to load account from row: %w", err)
|
||||
}
|
||||
|
@ -159,7 +160,7 @@ func (db *DB) LoadAccountById(id uuid.UUID) (*model.Account, error) {
|
|||
lastLogin int64
|
||||
)
|
||||
err := db.QueryRow(
|
||||
`SELECT username, salt, password_hash, is_admin, created, last_login, settings
|
||||
`SELECT username, salt, password_hash, is_admin, created, last_login, settings, password_reset
|
||||
FROM accounts
|
||||
WHERE id = ?;`,
|
||||
id,
|
||||
|
@ -170,7 +171,7 @@ func (db *DB) LoadAccountById(id uuid.UUID) (*model.Account, error) {
|
|||
&created,
|
||||
&lastLogin,
|
||||
&account.Settings,
|
||||
)
|
||||
&account.PasswordReset)
|
||||
if err != nil {
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
return nil, nil
|
||||
|
@ -191,7 +192,7 @@ func (db *DB) LoadAccountByUsername(username string) (*model.Account, error) {
|
|||
lastLogin int64
|
||||
)
|
||||
err := db.QueryRow(
|
||||
`SELECT id, salt, password_hash, is_admin, created, last_login, settings
|
||||
`SELECT id, salt, password_hash, is_admin, created, last_login, settings, password_reset
|
||||
FROM accounts
|
||||
WHERE username = ?;`,
|
||||
username,
|
||||
|
@ -202,7 +203,7 @@ func (db *DB) LoadAccountByUsername(username string) (*model.Account, error) {
|
|||
&created,
|
||||
&lastLogin,
|
||||
&account.Settings,
|
||||
)
|
||||
&account.PasswordReset)
|
||||
if err != nil {
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
return nil, nil
|
||||
|
|
|
@ -113,6 +113,31 @@ func (db *DB) LoadStateById(stateId uuid.UUID) (*model.State, error) {
|
|||
return &state, nil
|
||||
}
|
||||
|
||||
func (db *DB) LoadStatePaths() (map[string]string, error) {
|
||||
rows, err := db.Query(
|
||||
`SELECT id, path FROM states;`)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to load states from database: %w", err)
|
||||
}
|
||||
defer rows.Close()
|
||||
states := make(map[string]string)
|
||||
for rows.Next() {
|
||||
var (
|
||||
id string
|
||||
path string
|
||||
)
|
||||
err = rows.Scan(&id, &path)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to load state from row: %w", err)
|
||||
}
|
||||
states[id] = path
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, fmt.Errorf("failed to load states from rows: %w", err)
|
||||
}
|
||||
return states, nil
|
||||
}
|
||||
|
||||
func (db *DB) LoadStates() ([]model.State, error) {
|
||||
rows, err := db.Query(
|
||||
`SELECT created, id, lock, path, updated FROM states;`)
|
||||
|
|
|
@ -52,7 +52,7 @@ func (db *DB) LoadVersionsByState(state *model.State) ([]model.Version, error) {
|
|||
defer rows.Close()
|
||||
versions := make([]model.Version, 0)
|
||||
for rows.Next() {
|
||||
var version model.Version
|
||||
version := model.Version{StateId: state.Id}
|
||||
var created int64
|
||||
err = rows.Scan(&version.AccountId, &created, &version.Data, &version.Id, &version.Lock)
|
||||
if err != nil {
|
||||
|
@ -66,3 +66,30 @@ func (db *DB) LoadVersionsByState(state *model.State) ([]model.Version, error) {
|
|||
}
|
||||
return versions, nil
|
||||
}
|
||||
|
||||
func (db *DB) LoadVersionsByAccount(account *model.Account) ([]model.Version, error) {
|
||||
rows, err := db.Query(
|
||||
`SELECT created, data, id, lock, state_id
|
||||
FROM versions
|
||||
WHERE account_id = ?
|
||||
ORDER BY id DESC;`, account.Id)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to load versions from database: %w", err)
|
||||
}
|
||||
defer rows.Close()
|
||||
versions := make([]model.Version, 0)
|
||||
for rows.Next() {
|
||||
version := model.Version{AccountId: account.Id}
|
||||
var created int64
|
||||
err = rows.Scan(&created, &version.Data, &version.Id, &version.Lock, &version.StateId)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to load version from row: %w", err)
|
||||
}
|
||||
version.Created = time.Unix(created, 0)
|
||||
versions = append(versions, version)
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, fmt.Errorf("failed to load versions from rows: %w", err)
|
||||
}
|
||||
return versions, nil
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue