diff options
-rw-r--r-- | src/dbx/db.go | 4 | ||||
-rw-r--r-- | src/dbx/users.go | 16 |
2 files changed, 13 insertions, 7 deletions
diff --git a/src/dbx/db.go b/src/dbx/db.go index 30f14f7..b5a0cfe 100644 --- a/src/dbx/db.go +++ b/src/dbx/db.go @@ -160,6 +160,10 @@ func scanToStruct[T any](rs *sql.Rows) (T, error) { rawValues[i] = &zero } + rs.Next() + if err := rs.Err(); err != nil { + return zero, err + } if err := rs.Scan(rawValues...); err != nil { return zero, err } diff --git a/src/dbx/users.go b/src/dbx/users.go index a0712ee..2eb3bbd 100644 --- a/src/dbx/users.go +++ b/src/dbx/users.go @@ -9,10 +9,10 @@ import ( ) type User struct { - Email string - Username string - Password string - AdminP bool + Email string `db:"email"` + Username string `db:"username"` + Password string `db:"password"` + AdminP bool `db:"adminp"` } var LoginFailed = errors.New("No user with the given username and password") @@ -41,10 +41,12 @@ func Login(username, password string) (User, error) { username = norm.NFC.String(username) password = norm.NFC.String(password) - u := User{} /* TODO: Pass a context here? */ - err := DB.QueryRow(`SELECT * FROM users WHERE username = ?`, username). - Scan(&u.Email, &u.Username, &u.Password, &u.AdminP) + rs, err := DB.Query(`SELECT * FROM users WHERE username = ?`, username) + if err != nil { + return User{}, err + } + u, err := scanToStruct[User](rs) switch { case errors.Is(err, sql.ErrNoRows): |